C++ 类继承与构造析构函数调用顺序详解
C++ 类继承中构造函数和析构函数的调用顺序
本文将通过实例代码演示创建派生类对象时,基类和成员类构造函数以及析构函数的执行顺序。
**代码示例:**c++#include
using namespace std;
class B {public: B() { cout << 'B constructor' << endl; } ~B() { cout << 'B destructor' << endl; }};
class C {public: C() { cout << 'C constructor' << endl; } ~C() { cout << 'C destructor' << endl; }};
class D : public B {public: D() { cout << 'D constructor' << endl; } ~D() { cout << 'D destructor' << endl; }private: C c1; C c2;};
int main() { D d; return 0;}
运行结果:
B constructorC constructorC constructorD constructorD destructorC destructorC destructorB destructor
分析:
从运行结果可以看出,在创建D类对象时,构造函数的调用顺序如下:
- B类的构造函数:首先调用基类B的构造函数。2. C类的构造函数:接着按照成员类C在D类中的声明顺序依次调用C类的构造函数。3. D类的构造函数:最后调用D类的构造函数。
在销毁D类对象时,析构函数的调用顺序与构造函数的调用顺序相反:
- D类的析构函数:首先调用D类的析构函数。2. C类的析构函数:接着按照成员类C在D类中的声明顺序的逆序依次调用C类的析构函数。3. B类的析构函数:最后调用B类的析构函数。
结论:
在C++ 类继承中,构造函数和析构函数的调用顺序遵循以下规则:
- 构造函数: 基类构造函数 -> 成员类构造函数 -> 派生类构造函数* 析构函数: 派生类析构函数 -> 成员类析构函数 -> 基类析构函数
理解构造函数和析构函数的调用顺序对于编写正确、高效的C++代码至关重要,尤其是在涉及继承、多态和资源管理的场景中
原文地址: https://www.cveoy.top/t/topic/jN0T 著作权归作者所有。请勿转载和采集!