如何在同一个数组中将多个继承的类放在一起?

时间:2013-09-12 03:50:16

标签: c++ inheritance

我有几个课程ObjDefPeopDefNpcDefPlyDef,以便PlyDefNpcDef分别继承PeopDefPeopDef继承了ObjDef。每个类都具有构建在它之前的类的功能,因此在PeopDef::Tick之前调用ObjDef::Tick非常重要。我将每个对象都存储在vector<ObjDef> object中,但是当主要的滴答循环通过它们时,我希望它们调用原始类的Tick,而不是ObjDef::Tick,这就是vector<ObjDef>目前做到了。有没有办法做到这一点,或者每个班级都必须有一个单独的向量?

1 个答案:

答案 0 :(得分:2)

您可以在向量中存储ObjDef指针(ObjDef *或智能指针),并使Tick方法成为虚拟。

以下是一个例子:

#include <iostream>
#include <vector>
#include <memory>

class ObjDef
{
public:
    virtual void Tick()
    {
        std::cout << "ObjDef::Tick\n";
    }
};

class PeopDef : public ObjDef
{
public:
    virtual void Tick()
    {
        std::cout << "PeopDef::Tick\n";
    }
};

int main()
{
    std::vector<std::shared_ptr<ObjDef>> objects;

    std::shared_ptr<ObjDef> obj(new ObjDef());
    std::shared_ptr<ObjDef> peop(new PeopDef());

    objects.push_back(obj);
    objects.push_back(peop);

    for (auto object : objects)
    {
        object->Tick();
    }

    return 0;
}