为什么基类继承两次,即使其中一个继承为虚拟?

时间:2017-10-28 13:23:51

标签: c++ inheritance

onSelected

我的书说

  

普通基类和虚基类之间的唯一区别是   当一个对象多次继承基础时会发生什么。如果   使用虚拟基类,然后只有一个基类   物体。否则,将找到多个副本。

但是在这个程序中,即使其中一个基类被继承为虚拟,为什么还有两个副本?

1 个答案:

答案 0 :(得分:4)

几乎在一个基类中继承并不会使其所有兄弟基因也实际上继承。必须在要派生类中直接或间接共享的所有基类中将继承标记为虚拟。

由于您未将virtual添加到c3,因此C ++编译器无法将其作为虚拟继承继承c1

添加virtual解决了这个问题:

class c3 : virtual public c1{
public:
    int k;
}