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

时间:2017-01-07 15:17:39

标签: c++ c++11 abstract-class virtual-functions

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();时会发生这种情况。

1 个答案:

答案 0 :(得分:3)

对于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 ...

relationship