我收到了以下程序的混乱输出。
#include<iostream>
using namespace std;
class A
{
int x;
public:
A()
{
cout << "A() " << endl;
}
};
class B : virtual public A
{
int y;
public:
B()
{
cout << "B() " << endl;
}
};
class C : public A
{
int z;
public:
C()
{
cout << "C() " << endl;
}
};
class D1 : public B , public C
{
int j;
public:
D1()
{
cout << "D1() " << endl;
}
};
class D2 : public C, public B
{
int k;
public:
D2()
{
cout << "D2() " << endl;
}
};
int main()
{
D1 d1;
D2 d2;
return 0;
}
以上代码打印输出如下。
A()B()A()C()D1()A()A()C()B()D2()
我期待输出为
A()B()A()C()D1()A()C()A()B()D2()
由于我从基类继承的顺序。
似乎virtual
关键字负责混淆输出。
有人可以在这里使用virtual
时详细说明上述行为的原因。