就像在XNA中的游戏引擎中一样,一次又一次地自动调用更新函数。我想知道如何用c ++实现这一点。
例如:
class base
{
void Update();
};
class child1: public base
{
void Update();
}
class child2: public base
{
void Update();
}
void main()
{
base *obBase = new base();
obBase->Update(); /*This should call Update of Child1 and Child2 classes how can I do this*/
}
答案 0 :(得分:4)
只需将其设为虚拟:
class base
{
virtual void Update();
};
这将提供多态行为
我猜你了:
base *obBase = new child1(); //or new child2();
答案 1 :(得分:1)
您无法访问基类的派生类的所有实例。
您需要做的是拥有某种容器,它将存储Child1
和Child2
类型的所有对象,然后在您决定时,遍历此容器并调用{ {1}}。
类似的东西:
Update
为了能够做到这一点,你需要使SomeContainer< base* > myObjects;
// fill myObjects like:
// myObjects.insert( new ChildX(...) );
// ...
// iterate through myObjects and call Update
成为虚拟功能。
为了防止(潜在的)内存泄漏,请使用智能指针,而不是Update
。
答案 2 :(得分:0)
我猜你正在尝试使用多态,如下所示:
Base* obj1 = new Child1();
Base* obj2 = new Child2();
BaseManager* manager = new BaseManager(); //A class with a data struct that contains instances of Base, something like: list<Base*> m_objects;
manager->add(obj1); //Add obj1 to the list "m_objects"
manager->add(obj2); //Add obj2 to the list "m_objects"
manager->updateAll(); //Executes update of each instance in the list.