C ++ - 使用虚拟继承进行构造函数初始化的顺序

时间:2018-02-05 16:04:19

标签: c++ oop inheritance

我有这个例子:

#include <iostream>

class A1 {
public:
    A1() {
        std::cout << "A1, ";
    }
};

class A2 {
public:
    A2() {
        std::cout << "A2, ";
    }
};

class AA1 : virtual public A1, public A2 {
public:
    AA1() {
        std::cout << "AA1, ";
    }
};

class AA2 : public A1, virtual public A2 {
public:
    AA2() {
        std::cout << "AA2, ";
    }
};

class B : public AA1, virtual public AA2 {
public:
    B() {
        std::cout << "B, ";
    }
};


int main() {
    B ob1;

    return 0;
}

并且该程序的输出是

A1, A2, A1, AA2, A2, AA1, B, 

我不太明白为什么会这样。

我看到订单应该如下:

  

要执行的第一个构造函数是虚拟基础   层次结构中的任何类。它们按照它们的顺序执行   出现在基础图的深度优先从左到右的遍历中   类,从左到右指的是基数的出现顺序   班级名称。

知道,B类不应该首先初始化AA2类,这将首先初始化A2类?为什么订单以A1开头?

0 个答案:

没有答案