GESP 六级 · GESP 六级样题(C++ 组) 第 5 题

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

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

题目

关于下面 C++ 代码说法错误的是( )。 ![](https://cdn.luogu.com.cn/upload/image_hosting/s5dv37lr.png)

答案:D

考点

函数

解题思维

这题考类继承与成员访问。拿到题先看 Dog 类定义里有没有 color,再看 Pet 类有没有,最后判断最后一行为什么能跑通。

常见错误

学生最容易把 D 项当成正确答案,因为题目文字说 Pet 没有 color,就以为代码肯定报错。其实要记住:编译通过就说明 Dog 自己定义了 color,D 项说 Pet 没 color 是事实,但因此推断代码报错是错的。

详细解析(节选)

【考点】类继承|构造函数调用链|成员访问

这题考查的是 C++ 中类的继承关系、构造函数的调用机制以及成员变量的访问范围。命题人喜欢在继承关系中设置陷阱,比如让学生误以为基类没有的成员在派生类中也无法访问,或者让学生忽略派生类自己定义的同名成员。

解题的关键在于理解代码结构:Pet 类是基类,Dog 类公有继承自 Pet。Dog 类的构造函数中通过初始化列表调用了 Pet 的构造函数,这是正确的做法。变量 dog 是 Dog 类的实例,语法没有问题。最后一行输出 dog.color 能够成功运行,说明 color 这个成员变量在 Dog 类中是存在的。因此,D 项说最后一行会报错是因为 Pet 类中没有 color,这个说法是错误的,因为 color 其实是在 Dog 类中定义的,与 Pet 类无关。

在思考过程中,我们应该先确认 Pet 类是否真的没有 color,然后看 Dog 类是否有 color。如果有,那么 D 项就是错误的。如果没有,那么 D 项就是正确的。这道题的答案就是 D,因为 Dog 类确实有 color 成员。

关于构造函数,派生类构造函数必须显式调用基类构造函数,这是 C++ 的强制要求。如果基类没有默认构造函数,派生类构造函数必须显式调用基类构造函数。如果基类有默认构造函数,派生类构造函数可以不显式调用,但调用链依然存在。

关于成员访问,派生类可以访问基类中 public 和 protected 的成员,但不能访问 private 的成员。如果派生类中定义了与基类同名的成员,那么派生类中的成员会覆盖基类中的成员,这就是所谓的"隐藏"。

在考试中,遇到这类题目,我们应该先确认代码结构,然后看是否有编译错误,最后再判断哪个选项是错误的。这道题的答案就是 D,因为 Dog 类确实有 color 成员,与 Pet 类无关。

同考点真题

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