派生 C クラスでの仮想関数のオーバーライド: 必要かどうか?
C は、派生クラスで多態性の動作を有効にする「virtual」キーワードを提供します。ポリモーフィズムにより、異なるクラスで同じ関数の異なるバージョンを実装できます。ただし、次のような疑問が生じます。派生クラスで仮想関数をオーバーライドするときに、「virtual」を指定する必要がありますか?
次の構造体の定義を考えてみましょう:
struct A { virtual void hello() = 0; };
これは抽象を定義します。純粋な仮想関数 hello() を備えた基本クラス A。ここで、派生クラス B でこの関数をオーバーライドする 2 つのアプローチを調べてみましょう:
Approach #1: struct B : public A { virtual void hello() { ... } };
Approach #2: struct B : public A { void hello() { ... } };
問題は、これら 2 つのアプローチに違いはありますか?
答え:
答えは「いいえ」です。これら 2 つのアプローチの間に動作の違いはありません。ただし、その使用法には微妙な違いがあります。
この例では、オーバーライドされた関数は基本クラス A ですでに virtual として宣言されています。したがって、両方のアプローチは次のようになります。その結果、多態性の動作が発生します。 2 つのアプローチのどちらを選択するかは、コードの明確さと一貫性によって決まります。
以上がオーバーライドするかしないか: C で仮想関数をオーバーライドする場合、「virtual」を明示的に宣言する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。