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 に答える