#3895. [GESP202606 六级 C++] 第 2 题

[GESP202606 六级 C++] 第 2 题

下列代码中, 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;
}

{{ select(1) }}

  • PrinterScanner 使用了相同的构造函数。
  • work() 是虚函数,且 d1d2 实际指向不同派生类对象,发生动态绑定。
  • d1d2 是不同的指针变量。
  • 程序中使用了 delete 释放对象。