1 对象模型
1.1 简单对象模型

简单对象模型
- 每个
slot指向一个members,包括数据以及函数members本身不在object中,仅包含指向members的指针- $ object_size = ptr_size * members_num $
2.2 表格驱动

表格驱动模型
data member table存储数据本身member function table每个slot对应一个member functionobject仅包含data member table以及member function table两个指针
2.3 c++对象模型

c++ 对象模型
- 从简单对象模型派生
virtual table[vtbl]:存储virtual functions指针的表格,一般放在object表格第一个slot处,称为vptr,vptr的设定与重置由该class的构造函数或者复制运算符自动完成。object存储非静态数据以及非静态函数以及虚拟地址表- 优点:空间以及存取时间效率;缺点:对象的非静态数据成员改变时,需要重新编译
2.4 关于继承

多重继承
- 继承没有深度上的限制
2.5 关于多态

子类对象与指针的可能布局
其中ZooAnimal的子类为Bear
- 多态转换会造成对象的分割:
```cpp
Bear *bear = new Bear;
ZooAnimal *zoo_animal = (ZooAnimal *)bear;
```
+ zoo_animal只能访问ZooAnimal所拥有的部分
+ 转换只能使用指针或者引用
- 对于虚函数,子类实际上是重写了虚函数地址表中函数地址,因此对于zoo_animal来讲,其如果存在虚函数,调用的是Bear中的实现。该操作是在程序运行过程中实现。