2017-04-22 3 views
-2

私の最初の質問ですが、それは私のために非常にimprotantです。 言語:abstactオブジェクトのリスト

  • Organism:C++、私は抽象クラスを持っている

    #include <list> 
    

    を使用したいと思います。

  • AnimalOrganismを継承します。
  • PlantOrganismを継承します。

それから私は、彼らはすべてAnimalから継承などWolfSheep、のようなクラスを持っています。

最後に、OakGrassなどのクラスがあります。これらはすべて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

関連する問題