最保险的做法就是:避免使用多继承。
菱形继承
不使用虚继承,菱形继承的结果是:
可以看到:在对象(Derive1)d1
的内存布局中,成员int base0_1
出现了重复;在类Derive1
的虚表中,指向函数Base0::base0_func1(void)
的条目出现了重复。
虚继承
虚继承的使用方法如下:
Base0
叫做虚基类。在对象(Derive1)d1
中,只有一份关于Base0
的内容。Base1
使用virtual
来继承,可以理解为:愿意和其他类共享Base0
的拷贝。