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

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

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

题目

下列代码执行后的输出结果是(  )。

class Animal {
public:
virtual void speak() {
cout << "Animal ";
}
virtual ~Animal() = default;
};
class Cat : public Animal {
public:
void speak() override {
cout << "Cat ";
}
};
int main() {
Animal *p = new Cat();
p->speak();
delete p;
return 0;
}
答案:B

考点

函数

解题思维

看到虚函数调用先确认动态绑定机制,看到delete先确认析构顺序。核心是理解虚析构函数对对象销毁的影响。

常见错误

选项A忽略动态绑定,误判为静态调用;选项C混淆析构函数输出行为;选项D误以为缺少虚析构函数会编译失败。

详细解析(节选)

1. 考纲定位

本题考查GESP六级《高级编程》模块中虚函数与多态、析构函数两个核心考点。命题人专门设置这道题,就是要卡住那些"知道虚函数但不懂虚析构"的考生——六级考生普遍能写出虚函数重写,但约60%的人不知道虚析构函数对delete操作的影响。

2. 解题思维

调用p->speak()时,由于speak是虚函数,执行动态绑定,实际调用Cat::speak(),输出"Cat "。

执行delete p时,因为Animal的析构函数声明为virtual,会按派生类→基类顺序调用:

因此最终输出只有"Cat"。

同考点真题

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