GESP 六级 · GESP 202506 C++ 六级 第 16 题

判断题 · 答案 B · 考点:函数

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

题目

构造函数可以被声明为 virtual。

答案:B

考点

函数

解题思维

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

常见错误

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

详细解析(节选)

【考点】构造函数|虚函数|对象模型

考纲定位:GESP C++ 六级面向对象模块,重点考察「构造函数与虚函数互斥」这一底层语义。命题人专盯「死记硬背 C++ 语法」的考生,因为他们容易忽略构造函数执行时机与虚函数表绑定机制的内在冲突。

解题思维:看到「构造函数可声明为 virtual」先想——构造函数何时执行?虚函数表何时初始化?构造函数执行时,派生类部分尚未构造,虚函数表指针未指向完整类表,此时若允许 virtual,则虚表绑定将指向不存在的基类虚表,导致未定义行为。因此构造函数不可为 virtual,这是 C++ 对象模型强制规则。

陷阱拆解:选项 A 错误源于混淆「虚函数」与「纯虚函数」概念。纯虚函数可以声明为 virtual,但构造函数是特殊成员函数,其调用链由编译器硬编码,不支持虚表机制。命题人利用「虚」字误导,让考生误以为所有带 virtual 的函数都可如此,忽略了构造函数参与对象构造阶段的特殊性。

反命题思维:若此题改为「析构函数可声明为 virtual」,答案则为正确。这是因为析构函数执行时对象已完整构造,虚表已就绪,允许 virtual 可确保多态正确销毁。刷到类似题先问自己:该函数执行时对象是否已完全构造?虚表是否已绑定?

同考点真题

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