这是我的第一个问题,但对我来说非常重要。 语言:C++,我想用抽象对象列表
#include <list>
我有抽象类:
Organism
。Animal
其继承自Organism
。Plant
其继承自Organism
。
然后,我有类,如Wolf
,Sheep
等,他们都来自Animal
继承。
最后我有类似Oak
,Grass
等,他们都从Plant
继承。
如何创建包含所有这些元素的列表? list<Organism> my_list;
不起作用。
这是我的第一个问题,但对我来说非常重要。 语言:C++,我想用抽象对象列表
#include <list>
我有抽象类:
Organism
。Animal
其继承自Organism
。Plant
其继承自Organism
。然后,我有类,如Wolf
,Sheep
等,他们都来自Animal
继承。
最后我有类似Oak
,Grass
等,他们都从Plant
继承。
如何创建包含所有这些元素的列表? list<Organism> my_list;
不起作用。
在一个很大的捷径中,你必须使用多态,而你的列表应该包含指向具体对象的基类指针。
例如:
#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;
}
你尝试过这么远吗?你卡在哪里?展示你的作品! –
你和今晚认识到这件事的所有人明天都会到场。 –
@KerrekSB嘿,别让我这样恐慌!我几乎相信我们是星期天晚上! – Quentin