从指针向基类调用多态函数

时间:2017-04-20 00:02:45

标签: c++ class vector polymorphism

我的类结构如下:

      1
     / \
    2   3
   |||  ||
  4 5 6 7 8

和一个保持指向1的向量.1有三个纯虚函数,所有这些函数都被重写以返回2和3中的默认值,然后是4到8中的特定值。

通过类和两个违规函数控制向量:

class Vector
{

public:
    Vector();

    void vectorAdd(Food* food)
    {
        mList.push_back(food);
    }


    //The two offending functions. The functions they point to are pure
    //virtual in the Food class and overridden in the derived classes.

    string getDescription(size_t index)
    {
        return mList[index]->getDescription();
    }


    double getPrice(size_t index)
    {
        return mList[index]->getPrice();
    }
private:
    vector<Food*> mList;
};

我通过以下方式添加来自int main的向量:

list.vectorAdd(&Spaghetti);

代码全部编译,但每当我调用Vector :: getDescription(index)或Vector :: getPrice(index)时,我都会收到一个Debug Error,但没有关于出错的信息。

2 个答案:

答案 0 :(得分:1)

此处的问题是,您的vectorAdd函数参数应为Food*类型,而不是*Food

void vectorAdd(Food* pFood)
{
    mList.push_back(pFood);
}

答案 1 :(得分:0)

发现问题,需要使用(新...)而不是(&amp; ...)