[過去ログ]
C/C++ゲーム製作総合スレッド Part1 (1001レス)
C/C++ゲーム製作総合スレッド Part1 http://echo.5ch.net/test/read.cgi/gamedev/1337516528/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
791: 名前は開発中のものです。 [sage] 2012/08/10(金) 09:13:05.29 ID:KRTgZJ6N 元の、BaseScene::main() が BaseScene自体を返すと、BaseScene の仮想関数を呼び出すときに、サブクラスの仮想関数が呼ばれるのではなくて BaseScene自体の仮想関数が呼び出されてしまう。値で返すと、元のサブクラスの型情報は失われるから、そりゃそうだよねって話。 少し簡略化して、基底クラス Base とそれを継承した サブクラス Sub が存在して、それぞれに仮想関数invoke() を用意する。 // cl.exe /EHsc /W4 /WX main.cpp #include <iostream> // 基底クラス class Base{ public: virtual void invoke(){ std::cout << "Base::invoke();" << std::endl; };}; // サブクラス class Sub : public Base{ public: virtual void invoke(){ std::cout << "Sub::invoke();" << std::endl; };}; int main( int, char*[]){ Sub a; Base b = a ; Base* c; c = static_cast<Base*>(&a); a.invoke(); // Sub::invoke(); "Sub::invoke() が呼び出される" b.invoke(); // Base::invoke(); "Base::invoke() が呼び出される" c->invoke(); // Sub::invoke(); "Sub::invoke() が呼び出される" return 0; } この場合、bは、Sub のインスタンスである a を代入してるけど、b は 依然としてBaseのインスタンスなので、 b.invoke() は、 Base::invoke() を呼び出す。 これをポインタ経由で呼び出すときは c->invoke() で Sub::invoke() が呼ばれる。 http://echo.5ch.net/test/read.cgi/gamedev/1337516528/791
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.032s