C++_virtual 仮想関数 メモ

前提知識:多態性
ポインタ云々はスル―。よく分からん。デストラクタ云々もスル―。重要そうけど。

 

派生クラスで再定義されるメンバ関数のこと。virtual 修飾子をつける。
親クラスのポインタから、子クラス ( オーバーライドした ) 関数を呼び出す時に使う。

 

色々ソース略
main

    親型 * p = new 子クラス();
    p->関数 A( );  // cA
    p->関数 B( );  // pB

 

    virtual A( ){ std::cout << pA };
    B( ){ std::cout << pB };

 

    A( ){ std::cout << cA };
    B( ){ std::cout << cB };

 

ポインタ型変数でないと子クラスは呼び出されない。
new でないと以下のような挙動らしい。

    親型 p = 子クラス( );
    p.関数 A( );  // pA

 

純粋仮想関数

virtual A( ) を以下のように実装すると純粋仮想関数という。
実装がない関数で、クラスを継承した子クラスで実装することが前提となる。

    virtual A( ) = 0;

 

注意点

・親のデストラクタにも virtual をつける。
  子クラスのデストラクタと親クラスのデストラクタを呼び出す為。
  ( メモリリークを発生させないために )

・コンストラクタやデストラクタ内で仮想関数を呼んではいけない。

 

 

こちらから。
http://cpp-lang.sevendays-study.com/ex-day6.html
https://maku77.github.io/cpp/virtual.html
https://qiita.com/ryuj/items/ad975307cd303e3bf590
https://msdn.microsoft.com/ja-jp/library/0y01k918.aspx

 

以上。