0

我有几个类,ObjDefPeopDefNpcDefPlyDef,这样每个单独继承,并PlyDef继承ObjDef。每个类都具有建立在它之前的类上的功能,因此调用 before很重要。我将每个对象都存储在 a 中,但是当主刻度循环通过它们时,我希望它们调用原始类的 Tick,而不是,这是当前所做的。有什么办法可以做到这一点,还是我必须为每个班级有一个单独的向量?NpcDefPeopDefPeopDefPeopDef::TickObjDef::Tickvector<ObjDef> objectObjDef::Tickvector<ObjDef>

4

1 回答 1

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;
}
于 2013-09-12T03:54:56.630 回答