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

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

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

题目

为了让 Dog 类的构造函数能正确地调用其父类 Animal 的构造方法,横线线处应填入( )。

class Animal {
public:
    std::string name;

    Animal(std::string str) : name(str) {
        std::cout << "Animal created\n";
    }

    virtual void speak() {
        std::cout << "Animal speaks" << endl;
    }
};

class Dog : public Animal {
    std::string breed;
public:
    Dog(std::string name, std::string b) : ______________, breed(b) {
        std::cout << "Dog created\n";
    }
    void speak() override {
        std::cout << "Dog barks" << endl;
    }
};

int main() {
    Animal* p = new Dog("Rex", "Labrador");
    p->speak();
    delete p;
    return 0;
}
答案:A

考点

函数

解题思维

根据上下文和C++语法规则确定空缺处应填的内容,关注函数调用参数、表达式和返回值类型。

常见错误

填空时注意语法完整性:分号、括号匹配、函数参数类型和个数、返回值类型。

详细解析(节选)

【考点】类继承|构造函数初始化列表|C++语法规范

---

🎯 考纲定位:GESP六级C++面向对象核心考点——构造函数初始化列表。命题人专挖Java思维惯性,C++基类构造函数必须通过Base(arg)显式调用,而非super,这是六级考生最容易栽跟头的地方。

---

🧠 解题思维:Dog构造函数初始化列表需调用父类Animal构造。Animal构造函数接受std::string参数,故Animal(name)正确——按顺序把name传给基类,再把b存到成员变量。Animal::Animal(name)语法冗余(Animal::是作用域解析符,非调用方式);Animal()因Animal无默认构造且未传参必编译失败。

---

🪤 陷阱拆解:A. Animal(name)是C++标准写法,命题人以此区分Java学生;B. super(name)是Java关键字,C++无此机制,属典型跨语言混淆;C. Animal::Animal(name)看似严谨实则画蛇添足——构造函数在初始化列表中直接写类名即可,加::反而暴露语法盲区;D. Animal()是逻辑陷阱,当基类无默认构造且参数必传时,漏写参数必报错。

---

🔄 反命题思维:若Animal增加默认构造Animal(),则Animal()亦成立;若Dog参数改为std::string breed,则Animal(breed)同样正确。刷到此类题先问:基类构造参数是否匹配?调用形式是否符合C++语法?

同考点真题

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