トップページ > コンテンツ > プログラミング入門 > C++入門 > 仮想関数の必要性2

さらに、この機能をうまく活用するために、C++では基本クラスのポインタに派出クラスのオブジェクトのアドレスを
&を使うことで渡せるという特性を利用することを考える。
int main(){
 SomeBase *k; //基本クラスのポインタ
 SomeA j; //派出クラスのオブジェクト
 k = &j;
 k.somefunction();
}

しかしながら、実際は基本クラスのポインタは結局は基本クラスのオブジェクトであるため、
実行すると基本クラスの関数を呼び出してしまう。

そこで、virtualをつけて仮想関数にすることで、関数の実装内容は派出クラスに依存するという
方法がある。

この場合には、
SomeBase{
  //次の2文のうち、一つを記述する
  //派出クラスで実装されなかったときに呼ばれる。
  virtual void somefunction(){何か中身}; 
 //純粋仮想関数。派出クラスで実装されないとエラーが出されるので、エラー防止になる。   
  virtual void somefunction() = 0; 
}
という風にしてやるとよい。

最終更新:2011年04月03日 11:20