言い換えれば、関数の定義が派生クラスで変更され、その派生クラスの動的に割り当てられたメモリへのポインターが変更された関数を呼び出す場合、特にその関数は基本クラスではなく呼び出されますか?
virtual キーワードを使用しないことが、プログラマーの利益になるのはどのような場合ですか?
virtual
キーワードは、動的ディスパッチを実装するようにコンパイラに指示します。これが言語の設計方法です。このようなキーワードがないと、コンパイラは動的ディスパッチを実装するかどうかを判断できません。
virtual
または動的ディスパッチの一般的な欠点は、
一つの理由:
ライブラリのように、別のモジュールにある基本クラスを検討してください。
アプリケーションの派生クラス。
ライブラリのコンパイル中にコンパイラは、指定された関数が仮想である/仮想でなければならないことをどのように認識しますか。
C++ の主要な設計原則の 1 つは、C++ では使用されていない機能のオーバーヘッドが発生しないことです (「ゼロ オーバーヘッドの原則」)。これは、高性能に焦点を当てているためです。
これが、Java などの言語では関数がデフォルトで仮想であるのに対し、仮想関数などの機能をオプトインする必要がある理由です。
できないので、コンパイラは知りません。すべての機能には常にコストがかかるため、仮想機能を使用しないことを意図している可能性があります。