【发布时间】:2014-01-28 19:23:37
【问题描述】:
#include <iostream>
using namespace std;
struct A{
A() {cout << "A" << endl;}
A(int a) {cout << "A+" << endl;}
};
struct B : virtual A{
B() : A(1) {cout << "B" << endl;}
};
struct C : virtual A{
C() : A(1) {cout << "C" << endl;}
};
struct D : virtual A{
D() : A() {cout << "D" << endl;}
};
struct E : B, virtual C, D{
E(){cout << "E" << endl;}
};
struct F : D, virtual C{
F(){cout << "F" << endl;}
};
struct G : E, F{
G() {cout << "G" << endl;}
};
int main(){
G g;
return 0;
}
程序打印:
A
C
B
D
E
D
F
G
我想知道我应该使用什么规则来确定构造函数被调用的顺序。谢谢。
【问题讨论】:
-
虚拟基由派生最多的类在任何其他基之前构造。
-
要详细说明@KerrekSB 的评论以及
A+未打印的事实,请注意将D更改为调用A(1)具有相同的行为,然后查看this one .现在三个都打电话给A(),但是G打电话给A(1)。
标签: c++ inheritance constructor multiple-inheritance