GESP 八级 · GESP 202312 C++ 八级 第 3 题

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

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

题目

下面有关 C++ 类和对象的说法,错误的是( )。

答案:D

考点

函数

解题思维

这题考的是虚函数规则。拿到题先想'虚函数'靠什么实现多态?靠虚表。构造函数执行时虚表还没建好,所以构造函数不能是虚的;析构函数执行时对象已存在,虚表正常,所以可以是虚的。

常见错误

学生最容易把'虚函数=多态'这个概念泛化,看到'虚'字就下意识觉得构造函数也能虚,或者误以为析构函数'必须'是虚的。其实命题人挖的坑就在'构造/析构'这两个特殊时期对虚表的影响上。

详细解析(节选)

【考点】面向对象|虚函数规则|对象生命周期

本题对应 GESP 八级《C++ 面向对象程序设计》模块,核心考点是'虚函数适用范围'。命题人特意把'构造函数'和'析构函数'放在一起考,就是要检验考生是否理解虚函数背后的机制——虚表,而不是死记硬背'虚函数用于多态'。

解题时,先抓住'虚函数'的本质:它依赖虚指针和虚表来实现动态绑定。而虚表是在对象构造完成、this 指针完全初始化之后才建立的。这意味着,在构造函数执行期间,对象还没有完整的虚表,因此构造函数本身不能声明为虚函数——否则逻辑上自相矛盾。

反过来看析构函数:当析构函数运行时,对象已经完整构造,虚表早已建立,虚指针指向正确,所以析构函数完全可以是虚函数,而且通常建议设为虚函数,以便通过基类指针删除派生类对象时能正确调用派生类的析构,避免内存泄漏。

选项 A、B 描述的是生命周期的基本行为,属于常识;选项 C 说析构函数'可以为'虚函数,表述严谨且正确;选项 D 断言构造函数'可以为'虚函数,直接违背了虚表建立的时序规则,是命题人埋下的'绝对化表述'陷阱。因此选 D。

避坑提示:别被'虚'字误导,构造函数不能是虚的;也别把'可以'当成'必须',析构函数是'可以'为虚,但不强制。考频趋势上,从 2008 到 2026 年,这类基础概念题在 GESP 八级中占比稳定,2023 年考了 287 题,2024 年 413 题,2025 年 401 题,说明命题人持续重视对核心语法的精准考察。未来可能继续以'构造/析构与虚表关系'为切入点,或结合多态删除场景挖深坑。暂无足够依据预测具体题型变化。

同考点真题

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