虚拟继承:Base Ctor没有调用Most Derived Class?

mah*_*esh 3 c++ inheritance multiple-inheritance virtual-inheritance

class Base
{
      public:
          Base(){}
          Base(int k):a(k) 
          {     
          }
            int a;
};

class X:virtual public Base
{
      public:
            X():Base(10){}
            int x;
};

class Y:virtual public Base
{
      public:
            Y():Base(10){}
            int y;
};

class Z:public X,public Y
{
public:
    Z():X(10){}
};

int main()
{
           Z a;
           cout << a.a;
           return 1;
}
Run Code Online (Sandbox Code Playgroud)

在上述情况下,Z():X(10){} Base(int k):a(k)不打电话,但是当我改变Z():Base(10){}Base(int k):a(k)被调用.为什么?

谢谢.

Joe*_*oeG 7

因为您使用了virtual关键字 - 这正是它所做的.

您必须Base在初始化列表中显式初始化,Z以便消除初始化X和初始化之间的歧义Y.