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.存在虚函数中,每个对象都有一个指向虚函数表的指针