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

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

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

题目

下列代码中,d1->work(); 和 d2->work(); 输出不同结果的主要原因是( )。

class Device {
public:
    virtual void work() {
        cout << "Device is working" << endl;
    }
    virtual ~Device() {}
};
class Printer : public Device {
public:
    void work() override {
        cout << "Printer is printing" << endl;
    }
};
class Scanner : public Device {
public:
    void work() override {
        cout << "Scanner is scanning" << endl;
    }
};
int main() {
    Device* d1 = new Printer();
    Device* d2 = new Scanner();
    d1->work();
    d2->work();
    delete d1;
    delete d2;
    return 0;
}
答案:B

考点

函数

解题思维

C++类:构造函数(对象创建时调用)、析构函数(对象销毁时调用)、虚函数(实现多态)。构造函数不能为虚。

常见错误

构造函数不能是虚函数(虚表在构造函数完成后才建立)。析构函数可以且通常应该为虚函数(防止内存泄漏)。

详细解析(节选)

【考点】虚函数机制|动态绑定|多态调用

1. 🎯 考纲定位

本题考查《GESP 六级·C++ 大纲》中面向对象编程模块的虚函数机制与动态绑定。命题人卡住的是90%考生的类型系统认知盲区:绝大多数人只背了"虚函数实现多态"这个结论,却从未理解运行时绑定发生在对象创建时而非函数调用时——这导致他们在遇到指针指向派生类对象时,仍习惯按指针类型确定函数版本。

同考点真题

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