下列代码中, 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;
}
Printer 和 Scanner 使用了相同的构造函数。
work() 是虚函数,且 d1 和 d2 实际指向不同派生类对象,发生动态绑定。
d1 和 d2 是不同的指针变量。
程序中使用了 delete 释放对象。