メソッドの静的バインディングの C++ の性質により、これはポリモーフィック呼び出しに影響します。
ウィキペディアから:
このディスパッチ メカニズムに関連するオーバーヘッドは低いですが、言語が対象とするように設計された一部のアプリケーション領域では、依然として重要な場合があります。このため、C++ の設計者である Bjarne Stroustrup は、動的ディスパッチをオプションで非デフォルトにすることを選択しました。virtual キーワードで宣言された関数のみが、オブジェクトのランタイム タイプに基づいてディスパッチされます。他の関数は、オブジェクトの静的タイプに基づいてディスパッチされます。
だからコード:
Polygon* p = new Triangle;
p->area();
がChild クラスにあるParent クラスarea()
のnon-virtual
関数である場合、上記のコードは、開発者が期待していない可能性のある を呼び出します。(導入した static-binding のおかげです)overridden
Parent's class method
他の人が使用するクラス (ライブラリなど) を作成したい場合、そのような以前のコードが期待どおりに実行されるように、すべての関数を仮想にする必要がありますか?