仮想関数とは? わかりやすく解説

仮想関数

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/09/16 05:46 UTC 版)

C++」の記事における「仮想関数」の解説

クラスメンバー関数virtualキーワードで修飾することにより、派生クラスオーバーライド(再定義)することが可能な仮想関数 (virtual function) となる。仮想関数は「メソッド」と呼ばれることもある。派生クラスにて、基底クラスの仮想関数と名前および引数の数や型の順序が同じ関数定義することでオーバーライドする(C++11以降では、overrideキーワードにより修飾することでオーバーライド明示するともできる)。基底クラスの仮想関数を派生クラスオーバーライドした場合実際に呼び出される関数オブジェクトの型によって決定される基底クラスポインタのみが与えられ場合コンパイラオブジェクトの型をコンパイル時に特定できず正し関数呼び出せないため、実行時にこれを特定する。これをダイナミックディスパッチと呼ぶ。仮想関数により、オブジェクト割り当てられ実際の型に従って最上位派生クラス実装した関数呼び出される一般的なC++コンパイラ仮想関数テーブル用いる。オブジェクトの型が判明している場合スコープ解決演算子利用して仮想関数テーブル使わないようにバイパスすることもできるが、一般的には実行時に仮想関数の呼び出し解決するのが普通である。 通常のメンバー関数加えオーバーロードした演算子デストラクタも仮想関数にできる。原則的にクラスが仮想関数を持つ場合デストラクタも仮想関数にすべきであるコンストラクタやその延長線上にあるコピーコンストラクタコンパイルされた時点オブジェクトの型が確定しないため仮想関数にできない。しかし、派生オブジェクトへのポインタ基底オブジェクトへのポインタとして渡され場合に、そのオブジェクトコピーを作らなければならない場合問題生じる。このような場合clone()関数(またはそれに準じる物)を仮想関数として作成するのが一般的な解決方法である。clone()派生クラスコピー生成して返す。 = 0をメンバー関数宣言末尾セミコロン直前挿入することにより、メンバー関数を純粋仮想関数 (pure virtual function) にできる。純粋仮想関数を持つクラスは純粋仮想クラス呼ばれ、このクラスからオブジェクト生成することはできないこのような純粋仮想クラス基底クラスとしての利用できる派生クラスは純粋仮称関数継承するため、派生クラスオブジェクト生成した場合全ての純粋仮想関数をオーバーライドして実装なければならない。純粋仮想関数を持つクラスオブジェクト生成しようと試みるようなプログラム行儀が悪い。

※この「仮想関数」の解説は、「C++」の解説の一部です。
「仮想関数」を含む「C++」の記事については、「C++」の概要を参照ください。

ウィキペディア小見出し辞書の「仮想関数」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「仮想関数」の関連用語

仮想関数のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



仮想関数のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのC++ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2024 GRAS Group, Inc.RSS