我有一小段代码如下:
#include <iostream>
using namespace std;
class C {
public:
C() {i = 6; cout << "C0:" << i << endl;}
C(int i0) {i = i0; cout << "C1:" << i << endl;}
~C() {cout << "C2:" << i << endl;}
private:
int i;
};
class D {
public:
D() {cout << "D0" << endl;}
~D() {cout << "D1" << endl;}
private:
C c;
};
int main(int argc, char* argv[]) {
cout << "X" << endl;
D d;
cout << "Y" << endl;
}
其输出为:
X C0:6 D0 Y D1 C2:6
我的问题是:在这种情况下,为什么C0:6
会在D0
之前创建
我知道对于继承的类,顺序是Base Constructor-&gt; Derived Constructor-&gt; Derived Destructor-&gt; Base Destructor。所以,如果D
是从C
继承的,那么我希望在这里订购。但是,根据我的判断,D
不是C
的子类;它只包含C
类的实例。
所以在这种情况下,为什么我得到相同的输出顺序,好像D
是C
的子类?
显然有一条我不理解的基本规则。
答案 0 :(得分:4)
在执行构造函数体中的语句之前,将初始化基类对象和成员变量(按此顺序)。
c
是D
的成员,因此您会在c
的构造函数体之前看到D
的初始化。
破坏以与建筑相反的顺序发生。