新ゲームプログラミングの館のsp6章を見ながらシーンチェンジ部分を作っています。
そこで、いくつかわからないことがあるので教えてください。
1.SceneMgr.cpp内のコンストラクタでmScene = (BaseScene*) new Menu(this);とありますが、
mSceneをBaseScene型のMenuでnewしているということでいいですよね?そのようなことは可能なのでしょうか?
検索したらアップキャストと呼ばれるものがヒットしましたが、それとはちょっと違うような気がします。それであっているのでしょうか?
2.1と同じ行でMenu(this)とありますが、thisとはこの場合SceneMgrのポインタですよね?
Menuのコンストラクタの引数にはISceneChanger* changerとあるので、SceneMgrのポインタを引数にする意味が分かりません。
3.BaseSceneクラスのprotectedにISceneChanger* mSceneChanger;とありますが、ISceneChangerには
純粋仮想関数があるためそのまま使うことはできないはずではないでしょうか?
よろしくお願いします。
c++でのシーンチェンジ
Re: c++でのシーンチェンジ
アップキャストです。MenuはBaseSceneを継承しているのでアップキャストが可能です。暇大生 さんが書きました: 1.SceneMgr.cpp内のコンストラクタでmScene = (BaseScene*) new Menu(this);とありますが、
mSceneをBaseScene型のMenuでnewしているということでいいですよね?そのようなことは可能なのでしょうか?
検索したらアップキャストと呼ばれるものがヒットしましたが、それとはちょっと違うような気がします。それであっているのでしょうか?
明示的にキャストする必要はないので(BaseScene*) は本当は不要です。
SceneMgrはISceneChangerを継承しているのでISceneChangerにアップキャストされます。暇大生 さんが書きました: 2.1と同じ行でMenu(this)とありますが、thisとはこの場合SceneMgrのポインタですよね?
Menuのコンストラクタの引数にはISceneChanger* changerとあるので、SceneMgrのポインタを引数にする意味が分かりません。
ISceneChangerのインスタンスを生成することはできませんが、ポインタとしてSceneMgrを代入しているだけでインスタンスは生成していないので問題はありません。暇大生 さんが書きました: 3.BaseSceneクラスのprotectedにISceneChanger* mSceneChanger;とありますが、ISceneChangerには
純粋仮想関数があるためそのまま使うことはできないはずではないでしょうか?