GESP 六级 · GESP202609 C++ 六级 第 3 题

选择题 · 答案 C · 考点:函数

← 整套速查表 GESP 六级 全部真题

题目

下列代码执行后的输出顺序是(  )。

class Base {
public:
Base() {
cout << "B ";
}
virtual ~Base() {
cout << "~B ";
}
};
class Derived : public Base {
public:
Derived() {
cout << "D ";
}
~Derived() {
cout << "~D ";
}
};
int main() {
Base *p = new Derived();
delete p;
return 0;
}
答案:C

考点

函数

解题思维

构造函数按基类到派生类顺序执行,析构函数按派生类到基类顺序执行。看到题先想:new 时基类构造器先跑,delete 时派生类析构器先跑。

常见错误

误以为析构顺序与构造相同(选 A);忽略基类构造器先执行(选 B);漏掉派生类析构器输出(选 D)。

详细解析(节选)

1. 考纲定位

本题考查《GESP 六级 C++ 面向对象编程》中"虚析构函数与对象生命周期"模块。命题人卡住的是考生对"构造顺序与析构顺序相反"这一核心规则的掌握,这是六级区分度最高的考点之一。

2. 解题思维

看到 new Derived() 先想:构造函数链式调用,基类构造器必在派生类构造器之前执行,输出顺序 B→D。

看到 delete p 先想:析构函数链式调用,派生类析构器必在基类析构器之前执行,输出顺序 ~D→~B。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断