本文参考了
上述博客给出了以下结论:
- 每个类都有虚指针和虚表;
- 如果不是虚继承,那么子类将父类的虚指针继承下来,并指向自身的虚表(发生在对象构造时)。有多少个虚函数,虚表里面的项就会有多少。多重继承时,可能存在多个的基类虚表与虚指针;
- 如果是虚继承,那么子类会有两份虚指针,一份指向自己的虚表,另一份指向虚基表,多重继承时虚基表与虚基表指针有且只有一份。
我觉的上述博客中结论有些不妥,自己做了实验进行验证,记录如下:
添加新虚函数
首先看一下普通继承下,子类中定义新的虚函数会发生什么:
子类B中没有定义新虚函数:
子类B中定义新虚函数: