多重继承

NDe*_*iny 3 c++ multiple-inheritance

我有2个基类(B1和B2),它们是从公共基类(B)派生出来的,它们有一个公共变量(let:int x;来自基数B),在第一个基数中x=0,在第二个基数中x=10(默认值在B1中给出, B2构造函数).

视觉:

class B
{
    int x;

protected:

    B(int x) : x{x}{}
};

class B1 : public B
{
protected:

    B1() : B(0){}
};

class B2 : public B
{
protected:

    B2() : B(10){}
};
Run Code Online (Sandbox Code Playgroud)

现在,如果我再推导一个类:

class D : virtual public B1, virtual public B2
{
public:

    D() : B1{}, B2{}{}
};
Run Code Online (Sandbox Code Playgroud)

这里只有一个x的副本可用于虚拟概念,现在如果我尝试使用派生类对象访问x值,那么x的实例将在O/p(x=0x=10)中得到,为什么?

Chr*_*odd 5

为了使用虚拟继承,基地B必须声明为在两个虚拟B1B2.没有它,你有B的非虚拟继承.

如果您有非虚继承,那么你有两个B在基地D,所以你不能访问xD没有限定它作为B1::xB2::x

如果你有虚拟继承,那么你只有一个B和一个x,所以对它的两个赋值(x=0x=10)将以你执行它们的顺序发生,而后者中的任何一个将覆盖前一个的设置值(多为带有x两个赋值的简单变量).