我有几个类,分别是ObjDef
,PeopDef
,NpcDef
和PlyDef
,这样PlyDef
和NpcDef
各自分别继承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;
}