继承中构造函数和析构函数的调用顺序
在继承的面向对象编程中,理解构造函数和析构函数的调用顺序至关重要。在处理多个基类和对象组合时,这一点变得尤为重要。
考虑以下类层次结构:
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; }
这里是管理此继承层次结构中构造函数和析构函数调用顺序的规则:
构造函数调用:
析构函数调用:
析构函数调用顺序相反构造函数调用顺序的顺序:
默认初始化列表:
即使没有显式定义的初始化列表,成员字段也会在派生类构造函数之前初始化被称为。在这种情况下,a将被初始化为A的默认构造函数。
因此,main函数中代码的预期输出将是:
A() C-tor A() C-tor B() C-tor ~B() D-tor ~A() D-tor ~A() D-tor
以上是C 继承中如何调用构造函数和析构函数?的详细内容。更多信息请关注PHP中文网其他相关文章!