为了简化处理继承的作业问题,我认为使用多态来完成任务可能更好。它不是必需的,但如果可能的话会更有意义。但是,我正在获得符号错误,使其工作,因为我认为应该或只调用基类定义。我希望调用基于对象的重载函数。
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();
答案 0 :(得分:1)
我打算把类型的东西放在一边,不过我认为你可能不需要它,因此不需要模板......但是,这就是你需要的东西:
首先,向量应该是指针:
vector<Fruit<int> *> fruits;
这会阻止slicing(对象的Apple部分被切断)。
此外,既然你有指针,你的循环就会改变:
for(int i=0; i<fruits.size(); i++)
fruits[i]->Info();
现在,这将为您所拥有的水果类型调用相应的Info
函数。