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