Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@r7kamura
Last active December 10, 2015 06:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save r7kamura/4392319 to your computer and use it in GitHub Desktop.
Save r7kamura/4392319 to your computer and use it in GitHub Desktop.

Virtual Function on C++

C++における仮想関数について。C++のポリモーフィズムにおいて、仮想関数は重要な機能の1つ。

仮想関数

通常、子クラスは親クラスの提供する汎用的な機能を拡張していく形で構成する。 このとき、親クラスのメンバ関数を再定義することができる。 このような関数を仮想関数と呼ぶ。 仮想関数は、基本クラスで再定義可能であるということを明示する必要がある。

オーバーライド

仮想関数による動的なポリモーフィズムをオーバーライドと呼ぶ。

コンパイル時バインディング

通常、関数はコンパイル時にアドレスが判明するため、 関数呼出に掛かるコストが少なく、効率が良い。 このように、コンパイル時点で確定している情報をコンパイル時バインディングと呼ぶ。 コンパイル時バインディングは、高速に動作するが柔軟性に欠けると言える。

実行時バインディング

これに対し、仮想関数を実行時バインディングと呼ぶ。 どのクラスに定義した関数を参照するかは、実行するまで分からない。 柔軟性に富むが、反面で関数呼出のためによりコストが掛かる。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment