据我所知,对于单继承,添加了一个指向虚函数表的指针,以确定在运行时调用哪个父类函数。
class Genius {
int IQ;
public:
virtual void brag();
};
class Me : public Genius {
int age;
};
实例化时,Me
的内存布局应该类似于
pointer to Genius vtable
int iq
int age
但是在多重继承的情况下会发生什么?
// Assume CoolDude has virtual functions as well
class Me : public Genius, public CoolDude {
int age;
};
Me
类的内存布局现在看起来像什么?如何处理多重继承?
答案 0 :(得分:0)
该类将有两个指向vtable的指针,一个指向Genius
的实现,另一个指向CoolDude
的实现。当转换为基类时,返回的指针将与vtable(和其他成员)或基类的偏移量不同。