这是我的第一个问题,但这对我来说非常重要。 语言:C ++,我想用
#include <list>
我有抽象类:
Organism
。Animal
继承自Organism
。Plant
继承自Organism
。然后我有Wolf
,Sheep
等类。它们都继承自Animal
。
最后我有Oak
,Grass
等类。它们都来自Plant
。
如何创建包含所有这些元素的列表? list<Organism> my_list;
不起作用。
答案 0 :(得分:1)
在一个很大的捷径中,你必须使用多态,你的列表应该包含基类型的指针,它指向具体的对象。
例如:
#include <iostream>
#include <list>
#include <string>
using namespace std;
class Organism
{
public:
virtual string getName() const
{
cout<<"organism"<<endl;
return name;
}
protected:
string name;
};
class Animal : public Organism
{
public:
virtual string getName() const
{
cout<<"animal"<<endl;
return name;
}
};
class Plant : public Organism
{
public:
virtual string getName() const
{
cout<<"plant"<<endl;
return name;
}
};
int main() {
list<Organism*> objects;
Organism *ob1 = new Animal();
Organism *ob2 = new Plant();
objects.push_back(ob1);
objects.push_back(ob2);
for(auto it : objects)
{
it->getName();
}
for(auto it : objects)
{
delete it;
}
return 0;
}