- 无继承
- 继承无多态
- 继承多态
虚表 :
- 用来存放基类的每一个虚函数,再加上首位的一个slots(支持RTTI)。
- 每个class object导入一个vptr,提供执行期的链接,使得每一个class object都能找到虚函数表。
- constructor中生成vptr的初值,让其指向虚表。
- destructor销毁
vptr前端模式:丧失了与C的兼容性、丧失了多态
- 多层继承
namespace ObjectConDerived{
class Concrete1 {
public:
// ...
protected:
int val;
char bit1;
};
class Concrete2 : public Concrete1 {
public:
// ...
protected:
char bit2;
};
class Concrete3 : public Concrete2 {
public:
// ...
protected:
char bit3;
};
void test()
{
cout << "Concrete1类、Concrete2类、Concrete3类的大小:" << sizeof(Concrete1) << " " << sizeof(Concrete2) << " " << sizeof(Concrete3) << endl;
}
}
ObjectConDerived::test();//执行结果为:Concrete1类、Concrete2类、Concrete3类的大小:8 12 16
空间似乎”浪费了”, 但如果不浪费,则copy 对象时数据会不对
【引用】
[1]: <<深度探索C++ 对象模型 Inside The C++ Object Model >> Stanley B.Lippman 候捷 译
[2]: 代码地址 https://github.com/thefistlei/cplusStudy.git