首页 >后端开发 >C++ >C 继承中如何调用构造函数和析构函数?

C 继承中如何调用构造函数和析构函数?

Patricia Arquette
Patricia Arquette原创
2024-11-29 04:10:09332浏览

How are Constructors and Destructors Called in C   Inheritance?

继承中构造函数和析构函数的调用顺序

在继承的面向对象编程中,理解构造函数和析构函数的调用顺序至关重要。在处理多个基类和对象组合时,这一点变得尤为重要。

考虑以下类层次结构:

struct A {
    A() { cout << "A() C-tor" << endl; }
    ~A() { cout << "~A() D-tor" << endl; }
};

struct B : public A {
    B() { cout << "B() C-tor" << endl; }
    ~B() { cout << "~B() D-tor" << endl; }

    A a;
};

在主函数中:

int main() {
    B b;
}

这里是管理此继承层次结构中构造函数和析构函数调用顺序的规则:

构造函数调用:

  1. 基类构造: 构造函数调用以基类开始。在这种情况下,首先调用 A 的构造函数。
  2. 成员字段构造: 接下来,按照在派生类中声明的顺序构造成员字段。在本例中,构造了 B 类型 A 的字段 a。
  3. 派生类构造: 最后调用派生类 B 的构造函数。

析构函数调用:

析构函数调用顺序相反构造函数调用顺序的顺序:

  1. 派生类析构函数: 首先调用派生类 B 的析构函数。
  2. 成员字段析构函数: 接下来,调用成员字段 a 的析构函数,销毁它的实例A.
  3. 基类析构函数:最后调用基类 A 的析构函数。

默认初始化列表:

即使没有显式定义的初始化列表,成员字段也会在派生类构造函数之前初始化被称为。在这种情况下,a将被初始化为A的默认构造函数。

因此,main函数中代码的预期输出将是:

A() C-tor
A() C-tor
B() C-tor
~B() D-tor
~A() D-tor
~A() D-tor

以上是C 继承中如何调用构造函数和析构函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn