我有几个类,ObjDef
,PeopDef
,NpcDef
和PlyDef
,这样每个单独继承,并PlyDef
继承ObjDef。每个类都具有建立在它之前的类上的功能,因此调用 before很重要。我将每个对象都存储在 a 中,但是当主刻度循环通过它们时,我希望它们调用原始类的 Tick,而不是,这是当前所做的。有什么办法可以做到这一点,还是我必须为每个班级有一个单独的向量?NpcDef
PeopDef
PeopDef
PeopDef::Tick
ObjDef::Tick
vector<ObjDef> object
ObjDef::Tick
vector<ObjDef>
问问题
115 次
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 回答