onSelected
我的书说
普通基类和虚基类之间的唯一区别是 当一个对象多次继承基础时会发生什么。如果 使用虚拟基类,然后只有一个基类 物体。否则,将找到多个副本。
但是在这个程序中,即使其中一个基类被继承为虚拟,为什么还有两个副本?
答案 0 :(得分:4)
几乎在一个基类中继承并不会使其所有兄弟基因也实际上继承。必须在要派生类中直接或间接共享的所有基类中将继承标记为虚拟。
由于您未将virtual
添加到c3
,因此C ++编译器无法将其作为虚拟继承继承c1
。
添加virtual
解决了这个问题:
class c3 : virtual public c1{
public:
int k;
}