我有这个例子:
#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开头?