0

virtualメソッドは、ポリモーフィズムの C++ 実装の一部です。RTTI **とメソッド ルックアップに関連するオーバーヘッドを回避する以外に、省略すべきやむを得ない理由はありvirtualますか?

virtualいつでも基本クラスに追加できると仮定すると、非virtualメソッドを再定義する目的は何ですか?

**最新の CPU で測定可能かどうかは、この質問には関係ありません。

4

2 に答える 2

2

まあ、仮想ではない関数を再定義する理由はほとんどありません。実際、まったく同じオブジェクトに対する同じ関数呼び出しのように見えるものは、使用されるポインター/参照の静的タイプに基づいて異なる動作をする可能性があるため、それをお勧めしません。

仮想メンバー関数をオーバーライドすると、派生型の動作を特殊化できます。非仮想メンバー関数をオーバーロードすると、代わりに別の動作が提供されます。この動作では、関数/動作のどれが実行されるかが一般的な読者には明らかではない場合があります。

于 2013-04-20T02:06:22.773 に答える