GESP 六级 · GESP 202603 C++ 六级 第 3 题

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

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

题目

下面的代码在 main() 中有一行会导致编译错误,请找出来。

class Pet {
public:
    Pet(string n, int a) : name(n), age(a) {}
    string getName() { return name; }
    void birthday() { age++; }
private:
    string name;
    int     age;
};

int main() {
    Pet cat("奶茶", 2);
    cout << cat.getName();   // ①
    cat.birthday();          // ②
    cat.name = "大橘";       // ③
    cout << cat.getName();   // ④
}
答案:C

考点

函数

解题思维

逐项分析每个选项,利用C++语法规则和算法知识判断正误。注意隐含条件(如整型溢出、栈溢出)。

常见错误

注意题目问的是"错误的是"还是"正确的是",避免看反。选项中若有绝对化表述通常错误。

详细解析(节选)

【考点】类成员访问控制|构造函数|私有成员访问

🎯 考纲定位 GESP 六级大纲“面向对象编程”模块,命题人卡住的是对private访问权限的机械记忆——很多考生知道成员是私有的,却误以为构造函数或main能直接访问,暴露了“只记语法、不懂封装”的致命弱点。

🧠 解题思维 看到private成员,先确认访问路径:构造函数只在实例化时调用,main是普通函数,无法直接访问私有成员。本题陷阱在于混淆“初始化”与“赋值”——构造函数负责初始化,而main里试图赋值,违反了封装原则。

🪤 陷阱拆解 第③行试图直接访问private成员name,但main是普通函数,没有权限。其他行都通过公共方法访问,符合封装。命题人利用“构造函数=唯一赋值途径”的误区,其实构造函数只负责初始化,后续赋值必须通过公共接口。

🔄 反命题思维 若把name改为public,第③行合法,但第①行冗余;若添加setName公共方法,第③行可改为调用它。刷到类似题,先问“这个成员是谁能访问的”——命题人最爱考“权限边界”而非语法细节。

同考点真题

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