得到混乱的构造函数调用序列

时间:2016-09-09 10:38:16

标签: c++ virtual virtual-inheritance

我收到了以下程序的混乱输出。

#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时详细说明上述行为的原因。

0 个答案:

没有答案