下列程序的输出结果为( )。
#include <iostream>
using namespace std;
class A {
public:
A() {
cout << "A";
}
~A() {
cout << "~A";
}
};
class B : public A {
public:
B() {
cout << "B";
}
~B() {
cout << "~B";
}
};
int main() {
B b;
return 0;
}看到继承类对象创建,先想基类构造再派生类构造;销毁时反过来。
A/B 把构造顺序颠倒了,误以为派生类先构造;C 把析构顺序弄反了,误以为基类先析构。
本题考查 GESP 八级 C++ 继承体系中的对象生命周期管理。命题人卡住的是绝大多数考生对"构造顺序"和"析构顺序"的混淆——这是继承考点里最基础也最容易丢分的细节。
对象构造时,基类先构造、派生类后构造;对象销毁时,派生类先析构、基类后析构。
构造过程: 1. 创建 B b,先调用基类 A 构造函数 → 输出 A 2. 再调用派生类 B 构造函数 → 输出 B 3. 构造完成,输出 AB
销毁过程: 1. main 结束,b 被销毁,先调用派生类 B 析构函数 → 输出 ~B 2. 再调用基类 A 析构函数 → 输出 ~A 3. 析构完成,输出 AB~B~A