C++における仮想関数について。C++のポリモーフィズムにおいて、仮想関数は重要な機能の1つ。
通常、子クラスは親クラスの提供する汎用的な機能を拡張していく形で構成する。 このとき、親クラスのメンバ関数を再定義することができる。 このような関数を仮想関数と呼ぶ。 仮想関数は、基本クラスで再定義可能であるということを明示する必要がある。
仮想関数による動的なポリモーフィズムをオーバーライドと呼ぶ。
通常、関数はコンパイル時にアドレスが判明するため、 関数呼出に掛かるコストが少なく、効率が良い。 このように、コンパイル時点で確定している情報をコンパイル時バインディングと呼ぶ。 コンパイル時バインディングは、高速に動作するが柔軟性に欠けると言える。
これに対し、仮想関数を実行時バインディングと呼ぶ。 どのクラスに定義した関数を参照するかは、実行するまで分からない。 柔軟性に富むが、反面で関数呼出のためによりコストが掛かる。