今回はクラスの継承についてブログに書いていきたいと思います。 cocos2dでは、この辺りがとても簡単だったのですが、cocos2dxでの方法を勉強しました。 継承を利用しないとコードを書く量が増えたり、直感的にコードを読みにくくなるので、これを改善するためです。
![]() | 開発のプロが教える Cocos2d-x逆引きガイドブック 清水 友晶,松浦 晃洋,加島 拓,加藤 直人,木村 信行,小林 伸隆,鶴田 亮,西田 寛輔,藤田 泰生,八反田 智和(HatchUp) マイナビ 売り上げランキング : 5382 Amazonで詳しく見る |
override
親クラスに[virtual]をつけます。 これを利用すれば、子クラスのメソッドが呼び出されます。 これを「オーバライド」と呼びます。 [c] //親クラス virtual void Hogehoge();
//子クラス(overrideは付けなくても動くが、わかりやすくするために付けている) void Hogehoge() override;
[/c]
final
[final]を付けると、オーバライドができなくなります。 [c] //親クラス virtual void Hogehoge() final;
//子クラス(定義できない×) void Hogehoge() override;
[/c]
親クラスを呼び出す場合
子クラスから親クラスを呼び出す際には以下のようなコードを書きます。 [c] //親クラスを呼び出す。 ParentLayer :: Hogehoge();
[/c]
具体的な利用例
継承とオーバライドは色々な場面で利用ができるのですが、私が特に使いたかったのが配列からオブジェクトを取り出す時の処理です。 [c] //配列(この中に子クラスのインスタンスオブジェクトを入れている。) Vector<Node*> hoges;
//取り出す for (int i = 0; i < hoges(); j++) {
auto hoge = (ParentLayer*)objectArray.at(i);
hoge->Hogehoge();
}
[/c]
オーバライドをしているメソッドを呼び出せば、子クラスの処理が行われます。 アイテムやキャラクターなど、基本的なクラスを一つ作って、これを継承して作成をすれば、いちいちクラスを分けなくても個別のメソッドを実行することができます。
最後に
「override」「final」はVer3.xから利用できるようになったみたいで、これを上手く利用してクラスを設計すると誰から見てもわかりやすいコードになる感じがします。 どの機能を共通化すればいいのかなどを考えてコードを書いていきたいと思います。