読み方 : かそうかんすう

仮想関数【virtual function】仮想メソッド/virtual method

概要

仮想関数とは、オブジェクト指向プログラミングで用いられるメンバ関数の一種で、サブクラス(派生クラス)において同名・同引数・同返り値型の関数を定義し直すことができるもの。C++言語などで用いられる。
仮想関数のイメージ画像

クラスを構成するメンバ関数として定義されるが、サブクラスで同じ名前・引数・返り値型の関数を宣言し直すことができる。この上書きを「オーバーライド」(override)という。C++では関数宣言にvirtualキーワードを付けることで仮想関数として定義する。

仮想関数はスーパークラス(基底クラス)側にも実装を持つ。サブクラスでオーバーライドされなかった場合はスーパークラスの実装がそのまま引き継がれ、オーバーライドされた場合はサブクラス側の実装が優先される。

仮想関数の核心は「動的ディスパッチ」(動的束縛)にある。スーパークラスのポインタや参照を通じてメンバ関数を呼び出した場合、コンパイル時の宣言型ではなく実行時の実際のオブジェクトの型に基づいて呼び出す関数が選択される。これにより、呼び出し側はオブジェクトの具体的なクラスを意識せず共通のインターフェースで操作できる。この性質を「ポリモーフィズム」(多態性)と言い、仮想関数はその実現手段となっている。

C++にはさらに「純粋仮想関数」(pure virtual function)という形式もある。「virtual 関数名() = 0;」と宣言するもので、スーパークラス側に実装を持たず、サブクラスでの実装を強制する。純粋仮想関数を一つでも含むクラスは「抽象クラス」(abstract class)となり、それ自体はインスタンス化できない。他の言語では同様の機能を「抽象メソッド」(abstract method)と呼ぶことが多い。

C#では仮想関数に相当するものを「仮想メソッド」(virtual method)と呼び、やはりvirtual修飾子で宣言する。サブクラスではoverride修飾子を付けてオーバーライドすることができる。JavaやPythonではメンバ関数が原則として動的ディスパッチで動作するため、仮想関数に相当する特別な宣言は不要である。

(2026.6.30更新)
 

他の辞典等による「仮想関数」の解説 (外部サイト)

この記事の著者 : (株)インセプト IT用語辞典 e-Words 編集部
1997年8月より「IT用語辞典 e-Words」を執筆・編集しています。累計公開記事数は1万ページ以上、累計サイト訪問者数は1億人以上です。学術論文や官公庁の資料などへも多数の記事が引用・参照されています。