C++ 继承与构造函数析构函数调用顺序详解
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 @ #
结果解释:
*: 首先调用基类 B 的构造函数,初始化成员变量x为 5。&: 然后调用派生类 D 的构造函数,初始化成员变量d为 6。5 6: 调用派生类 D 的show()函数,先调用基类 B 的show()函数输出5,再输出6。@:delete q语句首先调用派生类 D 的析构函数。#: 最后调用基类 B 的析构函数。
总结:
- 创建派生类对象时,先调用基类的构造函数,再调用派生类的构造函数。
- 销毁派生类对象时,先调用派生类的析构函数,再调用基类的析构函数。
原文地址: https://www.cveoy.top/t/topic/k5U 著作权归作者所有。请勿转载和采集!