派生クラスの仮想関数: "virtual" キーワードは冗長ですか?
C オブジェクト指向プログラミングのコンテキストでは、仮想関数ポリモーフィズムの実装において重要な役割を果たします。派生クラスが仮想関数をオーバーライドすると、基本クラスの動作を損なうことなく新しい実装が作成されます。
次の構造体定義を考えてみましょう。
struct A { virtual void hello() = 0; };
この構造体は純粋な仮想関数を宣言します。 hello() という名前の関数。ここで、派生構造体 B で hello() をオーバーライドする 2 つのアプローチを調べてみましょう。
アプローチ #1 ("virtual" を使用):
struct B : public A { virtual void hello() { ... } };
アプローチ #2 (なし) "virtual"):
struct B : public A { void hello() { ... } };
一見すると、これらのアプローチの唯一の違いは、オーバーライドされた hello() 関数の前に "virtual" キーワードが存在するかどうかです。これには機能的な違いはありますか?
答え: いいえ、これら 2 つのアプローチの間に機能的な違いはありません。
アプローチで「virtual」キーワードを使用しているにもかかわらず、 #1、両方のアプローチは同等であり、同じ動作を生成します。この場合、hello() 関数が基本クラス A で仮想として宣言されているため、「virtual」キーワードは冗長です。
したがって、派生クラスで仮想関数をオーバーライドする場合、「virtual」キーワードは次のようにすることができます。プログラムの機能やセマンティクスに影響を与えることなく省略されます。それを使用するかどうかは、単にスタイルと好みの問題です。
以上がC の派生クラスで仮想関数をオーバーライドする場合、「virtual」キーワードは冗長ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。