トップページ
ひらく | たたむ | ページトップ
↓マウスで反転選択した文字を検索
C++
   
ページ内検索 ページ外検索
検索したい文字を入力して
ENTERを押すと移動します。
\n
[ トップページ ]
[ ____CommandPrompt ] [ ____JScript ] [ ____MySQL ] [ ____Cygwin ] [ ____Java ] [ ____Emacs ] [ ____Make ] [ ____Perl ] [ ____Python ] [ ____OpenGL ] [ ____C# ] [ ____StyleSheet ] [ ____C++ ] [ ____Winsock ] [ ____Thread ] [ ____VisualStudio ] [ ____C ] [ ____Win32API ] [ ____Lua ] [ ____PhotoShop ]
ヘッダ検索

___

■ RTTI(RunTimeTypeIdentification)


    RTTI とは動的型チェックのこと。
    実行時に型が正しいかチェックすること。
    

    コンパイラが自動生成するクラスのメタ情報のこと( クラスの型情報を埋め込む )
    実行時に型情報を取得できる機能

    RTTI を使うと、オブジェクトの型情報を調べて、安全にダウンキャストできる。

    
      
  USAGE
    plm cls 作成
  2. /GR   ( VC )
  3. pDerive = dynamic_cast< derive *>( pBase );

    手動でするならば, 次をクラスに持たせる
    要はどの種類かわかればいい
    clsID
    2. prtClsID   

  メリット
    cmp 非依存
    2. 余計な cls に RTTI を埋め込む必要なし
    3. 組み込む情報を 自由に選べる


___

■ typeid

実行時のオブジェクトの型をしらべることができる
___

■ ダイナミックキャストを避ける

ダイナミックキャストを利用すると、利用者側のコードが if - else のロジックで複雑になる。 また新規のクラスが追加すると、拡張が必要になる。 そこで、各クラスの具体的な処理を一般化して基底クラスで仮想関数としてハンドラをつくってしまう。 POINT if - else, dynamic_cast のコードをみたら、仮想関数による動的コールにまとめてしまう。 プレースホルダーとなるクラスを抽出する。
    class Gui {
      public :
        virtual void draw();  
    };
次に具体的な処理を仮想関数にかく。
    class Button : public Gui {
      public :
        void draw();
    };

    class Text : public Gui {
      public :
        void draw();
    };
利用する側は どのクラスか調べる必要もなく、draw() を呼ぶだけですむ。
    drawGui( Gui &gui ) {
      gui.draw();
    }
仮想関数を利用しないと、巨大な if - else ブロックができる。
    drawGui() {
      if ( gui->getType() == "" ) {
        Button *b = (Button *)gui;
        b->drawButton();
      }  
      else if ( gui->getType() == "" ) {

      }
    }



NINJAIDX 12