尝试定义派生自抽象类的类类型的对象时出错

Error when trying to define object of class type that is derived from an abstract class

本文关键字:类型 出错 对象 抽象类 定义 派生      更新时间:2023-10-16
class Road {
private:
    std::vector<Vehicle*> container;
public:
    std::vector<Vehicle*> getContainer(){
        return container;
    }
    virtual void operator+(Vehicle *vehicle)=0;
};

class Highway: public Road {
public:
    virtual void operator+(Vehicle *vehicle) {
         getContainer().push_back(vehicle);
     }
};

为什么在覆盖所有虚函数时出现无法分配抽象类型的对象的错误?当我尝试在主课上调用Road r = Highway();时,就会发生这种情况。

对于Road r = Highway();Road r意味着您正在尝试定义一个类型为 Road 的对象,这是一个抽象类,则不允许定义。初始值设定项列表部分(即 = Highway())不影响r的类型,它只是意味着r是从类型Highway的临时对象初始化的切片副本。

您应该使用带有抽象类类型的指针/智能指针或引用,例如

Road* r = new Highway;
// using r ...
delete r;

Highway h;
Road& r = h;
// using r ...