GESP 六级 · GESP202609 C++ 六级 第 2 题

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

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

题目

下列代码中,横线处应填写(  ),才能正确调用基类的带参数构造函数。

class Machine {
protected:
string id;
public:
Machine(string s) : id(s) {}
};
class Robot : public Machine {
int level;
public:
Robot(string s, int n) : __________, level(n) {}
};
答案:A

考点

函数

解题思维

继承体系中,派生类构造函数必须显式调用基类构造函数。C++ 语法规定:基类构造调用用"基类名(参数)",而非成员名或 super 关键字。本题 Robot 继承 Machine,Machine 构造函数为 Machine(string),故 Robot 初始化列表里必须写 Machine(s)。

常见错误

B 项 Machine::id(s) 混淆了成员访问与构造调用:id 是成员变量而非构造函数,:: 是作用域运算符,此处语法完全错误。C 项 super(s) 是 Java 语法,C++ 没有 super 关键字。D 项 id(s) 既不是基类名也不是成员名,编译器无法识别。

详细解析(节选)

继承体系中,派生类构造函数必须显式调用基类构造函数。C++ 语法规定:基类构造调用用"基类名(参数)",而非成员名或 super 关键字。本题 Robot 继承 Machine,Machine 构造函数为 Machine(string),故 Robot 初始化列表里必须写 Machine(s)。

B 项 Machine::id(s) 混淆了成员访问与构造调用:id 是成员变量而非构造函数,:: 是作用域运算符,此处语法完全错误。C 项 super(s) 是 Java 语法,C++ 没有 super 关键字。D 项 id(s) 既不是基类名也不是成员名,编译器无法识别。

1. 考纲定位

本题考查《GESP 考试大纲》六级 C++ 第 3 章"类与对象"中的继承与构造函数初始化列表。命题人专门设置此题,是因为绝大多数考生记住了"派生类必须调用基类构造"这条规则,却对 C++ 具体语法记混——把 Java 的 super 或成员访问语法套用到 C++ 上。

同考点真题

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