abstact对象的列表

时间:2017-04-22 20:43:01

标签: c++ list inheritance

这是我的第一个问题,但这对我来说非常重要。 语言:C ++,我想用

 #include <list>

我有抽象类:

  • Organism
  • Animal继承自Organism
  • Plant继承自Organism

然后我有WolfSheep等类。它们都继承自Animal

最后我有OakGrass等类。它们都来自Plant

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

1 个答案:

答案 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;
}