virtual
読み:バーチャル
外語:virtual
C++の予約語の一つで、いくつかの意味を持つ。
概要
基底クラスへの参照やポインターは、派生クラスのオブジェクトを指すことが可能だが、基底クラスの型のままメンバー関数を呼び出すと、基底クラスのメンバー関数が実行されてしまう。
しかし、基底クラスにおいてメンバー関数を定義する際にvirtual指定したメソッドは、実行時に変数が指している実際の型に基いて実行するメソッドが決定される。
オブジェクト指向の重要概念である多態性を実現するための機構であり、SmalltalkやJavaでは特に指定しなくても全てのメッセージ/メソッドはレシーバーの実際のクラスに基いて決定されるため、virtualのような仕組みは不要である。C++でわざわざこのような概念を導入したのは、ひとえに実行速度の観点による。
多重継承の際に基底となるクラスに対して指定すると、ダイヤモンド継承(継承する複数のクラスが共通基底クラスを持つ)の場合に、共通基底クラスの実体を一つにすることができる。
再検索