vtable如何处理多重继承?

时间:2018-04-02 09:26:40

标签: c++ multiple-inheritance vtable

据我所知,对于单继承,添加了一个指向虚函数表的指针,以确定在运行时调用哪个父类函数。

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类的内存布局现在看起来像什么?如何处理多重继承?

1 个答案:

答案 0 :(得分:0)

该类将有两个指向vtable的指针,一个指向Genius的实现,另一个指向CoolDude的实现。当转换为基类时,返回的指针将与vtable(和其他成员)或基类的偏移量不同。