11:タスク処理を実装する(1)
ゲームでは一連の処理をまとめて行うためのシステム開発が不可欠です。プレイヤーの処理にしても、背景の処理にしても、処理を行うための関数を同じ名称で統一しておけば、ループに組み込ませることができ、コーディングが簡潔になるばかりでなく、見た目もさっぱりして便利だと思いませんか?
これらはすべてCGameObjectの派生クラスなので……

このようにfor文などを使って一気に処理を行うことができるはず。
まずはCGameObjectに処理を実行させるための共通関数「Exec()」を宣言させましょう。ただし、CGameObjectクラス自体に何らかの処理をしてもらうことはないので、空の処理内容を入れておきます(9行目)。同様にオブジェクト生成時ではなく、タスク追加時に初期化が同時にできるよう「Init()」関数も用意しておきましょう。
関数の仮想化は、対象となる関数の先頭に
virtual
を付け加えるだけ。ちなみに派生クラスからさらに派生したクラスの同名関数を優先的に実行させたい場合は、派生クラス内の関数にもvirtual
を付け加えておく必要があります。仮想関数が存在する基底クラスには
virtual
を付け加えたデストラクタ(仮想デストラクタ)も作成しておいた方が無難です。仮想デストラクタがないと、基底クラスのデストラクタが優先して実行され、派生クラスのデストラクタは機能せず、やるべき後処理が行われない可能性があるからです。
次回はCGameObjectの派生クラスを一元管理するためのリストを作成します。