构造析构调用原则:
1、子类对象在创建时会首先调用父类的构造函数
2、父类构造函数执行结束后,执行子类的构造函数
3、当父类的构造函数有参数时,需要在子类的初始化列表中显示调用
4、析构函数调用的先后顺序与构造函数相反
案例如下:
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
class Parent {
public:
Parent() {
cout << "Parent().." << endl;
a = 0;
}
Parent(int a) {
cout << "Parent(int).." << endl;
this->a = a;
}
~Parent() {
cout << "~Parent()" << endl;
}
int a;
};
class Child :public Parent{
public:
//在子类调用构造函数的时候,一定会先调用父类构造
Child() {
cout << "Child().." << endl;
b = 0;
}
Child(int b) {
cout << "Child(int).." << endl;
this->b = b;
}
Child(int b, int a) :Parent(a){
cout << "Child(int ,int )" << endl;
this->b = b;
}
~Child() {
cout << "~Child()" << endl;
}
void test() {
cout << "b=" <<b<< endl;
}
private:
int b;
};
void main() {
Child c(10,20);
c.test();
}
程序运行结果如下:
由此可以看出先构造了父类的有参构造,然后才构造子类的有参构造,
继而运行成员函数test();输出b的值;
程序最后先析构子类,后构造父类;