子模板可以存储在基类数组中,使用重载的虚函数吗?

时间:2010-10-22 20:07:37

标签: c++ inheritance polymorphism virtual-functions

为了简化处理继承的作业问题,我认为使用多态来完成任务可能更好。它不是必需的,但如果可能的话会更有意义。但是,我正在获得符号错误,使其工作,因为我认为应该或只调用基类定义。我希望调用基于对象的重载函数。

template <class T>
class Fruit {
  private:
    int count;
    T type;
  public:
    virtual void Info();
};

template <class T>
class Apple : public Fruit<T> {
  private:
    int variety;
  public:
    void Info();
};

// more fruit-child classes

vector<Fruit<int> > fruits; // contains object of various derived types

...

for(int i=0; i<fruits.size(); i++
    fruits[i].Info();

1 个答案:

答案 0 :(得分:1)

我打算把类型的东西放在一边,不过我认为你可能不需要它,因此不需要模板......但是,这就是你需要的东西:

首先,向量应该是指针:

vector<Fruit<int> *> fruits;

这会阻止slicing(对象的Apple部分被切断)。

此外,既然你有指针,你的循环就会改变:

for(int i=0; i<fruits.size(); i++)
    fruits[i]->Info();

现在,这将为您所拥有的水果类型调用相应的Info函数。