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

以下 C++ 程序代码展示了继承关系中构造函数和析构函数的调用顺序:

class B {
    int x;
public:
    B(int i = 0) : x(i) { cout << '*'; }
    ~B() { cout << '#'; }
    void show() { cout << x; }
};

class D : public B {
    int d;
public:
    D(int i = 1, int j = 2) : B(i), d(j) { cout << '&'; }
    ~D() { cout << '@'; }
    void show() {
        B::show();
        cout << ' ' << d;
    }
};

int main() {
    D *q = new D(5, 6);
    q->show();
    delete q;
    return 0;
}

程序输出结果:

* & 5 6 @ #

结果解释:

  1. *: 首先调用基类 B 的构造函数,初始化成员变量 x 为 5。
  2. &: 然后调用派生类 D 的构造函数,初始化成员变量 d 为 6。
  3. 5 6: 调用派生类 D 的 show() 函数,先调用基类 B 的 show() 函数输出 5,再输出 6
  4. @: delete q 语句首先调用派生类 D 的析构函数。
  5. #: 最后调用基类 B 的析构函数。

总结:

  • 创建派生类对象时,先调用基类的构造函数,再调用派生类的构造函数。
  • 销毁派生类对象时,先调用派生类的析构函数,再调用基类的析构函数。
C++ 继承与构造函数析构函数调用顺序详解

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

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