1

就像在游戏引擎中一样,例如在 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*/
}
4

3 回答 3

4

只需将其设为虚拟:

class base
{
    virtual void Update();
};

这将提供多态行为

我假设你会说:

base *obBase = new child1(); //or new child2();
于 2012-08-16T12:42:52.070 回答
1

您不能访问基类的派生类的所有实例。

您需要做的是拥有某种容器,它将存储您所有类型的对象,Child1然后Child2,当您决定时,遍历该容器并调用Update.

就像是:

SomeContainer< base* > myObjects;
// fill myObjects like:
// myObjects.insert( new ChildX(...) );
// ...
// iterate through myObjects and call Update

为了能够做到这一点,您需要创建Update一个虚函数。

为了防止(潜在的)内存泄漏,请使用智能指针,而不是base*.

于 2012-08-16T12:45:25.733 回答
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.
于 2012-08-17T19:48:52.353 回答