06-4 继承中构造和析构顺序
子类在继承父类后,当子类创建对象的时候,也会调用父类的构造函数。
思考:在继承的时候,创建子类对象的时候,是先构造子类对象还是父类对象?析构呢?
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout << "这是类 A 的构造函数。" << endl;
}
~A()
{
cout << "这是类 A 的析构函数。" << endl;
}
};
class B : public A
{
public:
B()
{
cout << "这是类 B 的构造函数。" << endl;
}
~B()
{
cout << "这是类 B 的析构函数。" << endl;
}
};
int main()
{
class B b;
system("pause");
return 0;
}
运行结果:(环境:Windows11(arm/Apple M VM)/Visual Studio 2022/Debug/arm64)
这是类 A 的构造函数。
这是类 B 的构造函数。
请按任意键继续. . .
这是类 B 的析构函数。
这是类 A 的析构函数。
我们来分析一下:
在这里,我们创建了两个类,一个类是类A
,另外一个是类B
。其中,类B
使用公共继承方式(public
)继承自类 A
。
之后我们为类A
和类B
创建各自的构造和析构函数,并且使用cout
打印,方便我们在控制台上可以看出构造和析构的顺序。
之后我们使用在windows
系统下独有的命令:system("pause");
即一个暂停命令。
最后我们运行一下,发现打印的结果是先调用类A
的构造函数,再调用类B
的构造函数。之后会暂停。按任意键继续后,会先调用类B
的析构函数,再调用类B
的析构函数。
最终,可以得出结论:继承中,先调用父类的构造函数,再调用子类的构造函数。析构时,先调用子类的析构函数,再调用父类的析构函数。
- 总结:
- 继承中,先调用父类的构造函数,再调用子类的构造函数。析构时,先调用子类的析构函数,再调用父类的析构函数。
- 符合先构造的后析构的规律。(和一个类的对象做另外一个类的成员是一样的)
:-)