子类对象中,父类、父类成员、子类、子类成员被创建的顺序
在这里,我们定义基类 Person ,基类成员 PersonSex ,然后定义 Person 的派生类 Student ,派生类成员 StudentId 。 对这4个类分别创建显式构造函数和析构函数,程序如下:
#include <iostream>
using namespace std;
class PersonSex {
public:
PersonSex() { cout << "创建 PersonSex" << endl; }
~PersonSex() { cout << "PersonSex 被销毁" << endl; }
};
class Person {
public:
Person() { cout << "创建 Person" << endl; }
~Person() { cout << "Person 被销毁" << endl; }
private:
PersonSex ps;
};
class Id {
public:
Id() { cout << "创建 Id" << endl; }
~Id() { cout << "Id 被销毁" << endl; }
};
class Student :Person {
public:
Student() { cout << "创建 Student" << endl; }
~Student() { cout << "Student 被销毁" << endl; }
private:
Id cp;
};
void Function() {
Student s;
}
int main() {
cout << " - - - - - 主 函 数 开 始 - - - - - " << endl;
Function();
cout << " - - - - - 主 函 数 结 束 - - - - - " << endl;
return 0;
}
运行结果:
- 由此可以看出,在子类对象被创建时,对应的构造函数调用顺序为:
父类成员对象 -> 父类对象 -> 子类成员对象 -> 子类对象 析构函数调用顺序恰好与此相反: 子类对象 -> 子类成员对象 -> 父类对象 -> 父类成员对象
构造规则:
同一级内(一个对象包含该对象的所有成员),由里向外被构造; 不在同一级(有上下继承关系的类),由上至下被构造。
|