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

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

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

题目

在面向对象编程中,下列关于虚函数的描述中,错误的是( )。

答案:C

考点

函数

解题思维

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

常见错误

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

详细解析(节选)

【考点】虚函数与运行时多态|构造函数特性|基类析构函数

🎯 考纲定位:本题出自 GESP 六级 C++ 面向对象编程模块,精准卡住"虚函数有例外"这一高频失分点。绝大多数考生能记住"虚函数支持多态",却误以为构造函数也适用,命题人专门用这个绝对化表述(C 选项)筛掉死记硬背者。

🧠 解题思维:先抓定义——虚函数通过动态绑定实现运行时多态,故 A 正确。基类指针调用虚函数时,编译器不决定版本,而是根据对象实际类型(B 正确)。构造函数在对象构造期间执行,此时对象类型尚未确定,无法进行动态绑定,因此不能声明为虚函数(C 错误)。基类析构函数声明为虚函数可确保派生类对象被正确销毁,避免资源泄漏(D 正确)。

🪤 陷阱拆解:A 项是虚函数的核心用途,无争议。B 项"基类指针调用虚函数"是动态绑定的典型场景,命题人用"决定调用版本"这一模糊表述迷惑考生,实则指向正确。D 项是 C++ 最佳实践,命题人将其作为干扰项,但考生若理解构造函数和析构函数的生命周期差异,就不会误选。C 项的陷阱在于"构造函数可以声明为虚函数以支持多态"这一绝对化表述,它利用了考生对"多态"概念的过度泛化,以为所有函数都能支持多态。

🔄 反命题思维:若把 C 选项改为"析构函数可以声明为虚函数以支持多态",答案仍为 C,因为析构函数确实可虚化;若把题干改为"关于多态的下列说法正确的是",则 A、B、D 皆正确。刷到此类题,先问自己"命题人想考我什么"——是考虚函数的定义,还是考构造/析构的特殊性?

同考点真题

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