這是我的第一個問題,但對我來說非常重要。 語言: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