2017-04-22 68 views
-2

這是我的第一個問題,但對我來說非常重要。 語言:C++,我想用抽象對象列表

#include <list> 

我有抽象類:

  • Organism
  • Animal其繼承自Organism
  • Plant其繼承自Organism

然後,我有類,如WolfSheep等,他們都來自Animal繼承。

最後我有類似Oak,Grass等,他們都從Plant繼承。

如何創建包含所有這些元素的列表? list<Organism> my_list; 不起作用。

+3

你嘗試過這麼遠嗎?你卡在哪裏?展示你的作品! –

+1

你和今晚認識到這件事的所有人明天都會到場。 –

+2

@KerrekSB嘿,別讓我這樣恐慌!我幾乎相信我們是星期天晚上! – Quentin

回答

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; 
} 
+1

這僅僅是一個例子,你可以使用智能指針或者只需在元素上調用delete。 – mfaferek

+0

您現在添加了代碼,以便您的內存得到適當的精益,因此我刪除了我的第一條評論。 – sergiol