构造函数的调用顺序
基类构造函数:首先调用基类(父类)的构造函数。
成员变量构造函数:然后按照成员变量在类中声明的顺序调用它们的构造函数。
派生类构造函数:最后调用派生类(子类)的构造函数。
析构函数的调用顺序(完全与构造相反)
派生类析构函数:首先调用派生类(子类)的析构函数。
成员变量析构函数:然后按照成员变量在类中声明的逆序调用它们的析构函数。
基类析构函数:最后调用基类(父类)的析构函数。
示例代码
#include <iostream>
class Base {
public:
Base() {
std::cout << "father constructor\n";
}
~Base() {
std::cout << "father destructor\n";
}
};
class Member {
public:
Member() {
std::cout << "Member constructor\n";
}
~Member() {
std::cout << "Member destructor\n";
}
};
class Derived : public Base {
Member m;
public:
Derived() {
std::cout << "child constructor\n";
}
~Derived() {
std::cout << "child destructor\n";
}
};
int main() {
Derived d;
std::cout << " ----------- " <<std::endl;
return 0;
}
输出情况
// 顺序:父->成员->子
father constructor
Member constructor
child constructor
------------------
// 顺序:子->成员->父
child destructor
Member destructor
father destructor