我有几个类,分别是ObjDefPeopDefNpcDefPlyDef,这样PlyDefNpcDef各自分别继承PeopDef,而PeopDef继承ObjDef。每个类都具有在其之前的类上构建的功能,因此在PeopDef::Tick之前调用ObjDef::Tick是很重要的。我将每个对象都存储在vector<ObjDef> object中,但是当主刻度循环通过它们时,我希望它们调用原始类的Tick,而不是ObjDef::Tick,这是vector<ObjDef>当前执行的操作。有没有办法做到这一点,或者我必须为每个类都有一个单独的向量?

最佳答案

您可以将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;
}

07-27 13:59