请描述一下多重继承在内存中的存储模型
- 普通类在内存中的存储情况
VTAB(<- this) |
Data |
- 如果一个类有虚函数,那么它就有虚函数表,类的第一个单元是一个指针,指向这个虚函数表
- 如果一个类没有虚函数,他的祖先(所有父类)均没有虚函数,那么它的内存映像和C语言里的结构一样
- 如果类Y是是类X的一个继承(X是父类),那么类Y在内存中的结构如下
Y的VTAB(<- this) |
X的data |
Y的data |
-
现在看看class D多重继承
-
class D : public A, public B, public C
{
....
}
- 有了这种多重继承关系之后,这几个类在内存中的存储结构如下,
D的vTable(存的是一个指针) |
A的数据 |
B的vTable(存的是一个指针) |
B的数据 |
C的VTable(存的是一个指针) |
C的数据 |
D的数据 |
- 多重继承时,当把一个派生类强行转化成它的基类,它是能准确的找到他对应的虚函数表的。
- 而通过这个多重继承中的某个基类,其实也能找到其对应的派生类的虚函数表(通过偏移)。