GESP 七级 · GESP 202503 C++ 七级 第 6 题

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

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

题目

下面关于 C++ 类构造和析构函数的说法,错误的是( )。

答案:B

考点

函数

解题思维

C++类:构造函数(对象创建时调用)、析构函数(对象销毁时调用)、虚函数(实现多态)。构造函数不能为虚。

常见错误

构造函数不能是虚函数(虚表在构造函数完成后才建立)。析构函数可以且通常应该为虚函数(防止内存泄漏)。

详细解析(节选)

【考点】虚函数机制|对象多态|访问控制

1. 考纲定位 本题考查 GESP 六至七级 C++ 面向对象模块中「构造/析构函数」与「访问控制」的语义辨析。命题人专卡「虚函数」与「必须」的绝对化表述,这是绝大多数考生混淆「基类多态保护」与「全量强制规则」的高发区。

2. 解题思维 看到「析构函数必须声明为虚函数」要立即警觉——虚析构是基类多态的必要保护,但「必须」二字把适用范围无限扩大。核心推理链:只有当基类指针 Delete 派生对象时,才要求虚析构,否则基类析构就能正常工作;构造函数本质是初始化而非函数调用,C++ 标准直接禁止声明 virtual。

3. 陷阱拆解 逐项拆解:A 项构造函数确实无法声明虚函数(C++ 标准禁止);C、D 项默认构造与析构均可声明 private,这是封装工厂类的常用手段;只有 B 项「必须」是命题人埋下的绝对化陷阱——非基类或非多态场景下析构函数完全可以是普通函数,强行加 virtual 反而可能引发二义性。

4. 反命题思维 若命题人把「必须」改为「基类析构函数应当声明为虚函数」,答案就会变成 C;若把「virtual」改成「override」,则考察点会转向虚继承与多态实现细节。刷到此类题先问自己:「这个条件在什么场景下成立?」

同考点真题

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