GESP 六级 · GESP 202409 C++ 六级 第 20 题

判断题 · 答案 B · 考点:函数

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

题目

如下列代码所示的基类(base)及其派生类(derived),则生成一个派生类的对象时,只调用派生类的构造函数。

#include <iostream>
using namespace std;

class base {
public:
    base() {
        cout << "base constructor" << endl;
    }
    ~base() {
        cout << "base destructor" << endl;
    }
};

class derived : public base {
public:
    derived() {
        cout << "derived constructor" << endl;
    }
    ~derived() {
        cout << "derived destructor" << endl;
    }
};
答案:B

考点

函数

解题思维

仔细审题,明确已知条件和所求目标,运用相关知识点逐项分析。

常见错误

审题时注意题目要求(选正确还是选错误),避免因审题不清失分。涉及代码的题目要逐行分析变量变化。

详细解析(节选)

【考点】类继承与构造顺序|虚析构函数|静态成员初始化

🎯 考纲定位 本题考查 GESP C++ 六级"类与对象"模块中的继承体系与构造执行顺序。命题人专门放这道题,就是要卡住那些只背"派生类调用基类构造函数"却记反了调用时序的考生——他们以为派生先执行,其实是基类先执行。

🧠 解题思维 看到派生类定义,先确认继承方式(public),再回忆 C++ 对象构造规则:基类部分必须在派生类部分之前构造。因此对象生成时,基类构造函数先运行,派生类构造函数后运行。题目说"只调用派生类的构造函数",这直接违背了构造时序,答案选 B。

🪤 陷阱拆解

🔄 反命题思维 如果把基类声明为 virtual ~base(); 改成非虚析构,或者在派生类构造函数里显式不写 base(),构造顺序依然不变,但编译器警告会不同——这就能变成考"虚析构与资源管理"的新题。下次刷到继承相关题,先问自己:这题到底在考构造时序、虚函数机制,还是内存布局?答错往往是因为没分清命题靶心。

同考点真题

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