class是一种特殊的struct
1.在内存中class依旧可以看做变量的集合
2.class与struct遵循相同的内存对齐规则
3.class中的成员函数与成员变量是分开存放的
----每个对象有独立的成员变量
----所有对象共享类中的成员函数
struct B{
int i;
int j;
char c;//这里会内存对齐到int类型大小
double d;
};------》(sizeof(B)=20)
class A{
int i;
int j;
char c;
double d;
public :
void print(){}
};------->其大小也为20
int main(){
A a;
B* p=reinterpret_cast<B*>(a);
}
运行时的对象退化成结构体的形式:
1.所有的成员变量在内存中依次排布
2,成员变量间可能存在内存间隙
3.访问权限运行时失效
4.可以通过内存地址直接访问成员变量
5.类中的成员函数位于代码段中
6.调用成员函数时对象地址访问成员变量
7.C++语法规则隐藏了对象地址的调用过程
继承的对象模型分析:
继承发生后子类的代码块会加在父类的代码块后面
C++多态实现原理:
1.当类中声明虚函数时,编译器会在类中生成一个虚函数
2.虚函数表是一个存储成员函数地址的数据结构
3.虚函数表是由编译器自动生成与维护的
4.virtual成员函数会被编译器放入虚函数表中
5.存在虚函数中,每个对象都有一个指向虚函数表的指针