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类对象时,构造函数的调用顺序如下:

  1. B类的构造函数:首先调用基类B的构造函数。2. C类的构造函数:接着按照成员类C在D类中的声明顺序依次调用C类的构造函数。3. D类的构造函数:最后调用D类的构造函数。

在销毁D类对象时,析构函数的调用顺序与构造函数的调用顺序相反:

  1. D类的析构函数:首先调用D类的析构函数。2. C类的析构函数:接着按照成员类C在D类中的声明顺序的逆序依次调用C类的析构函数。3. B类的析构函数:最后调用B类的析构函数。

结论:

在C++ 类继承中,构造函数和析构函数的调用顺序遵循以下规则:

  • 构造函数: 基类构造函数 -> 成员类构造函数 -> 派生类构造函数* 析构函数: 派生类析构函数 -> 成员类析构函数 -> 基类析构函数

理解构造函数和析构函数的调用顺序对于编写正确、高效的C++代码至关重要,尤其是在涉及继承、多态和资源管理的场景中

C++ 类继承与构造析构函数调用顺序详解

原文地址: https://www.cveoy.top/t/topic/jN0T 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录