ホームページ >バックエンド開発 >C++ >C の派生クラスで仮想関数をオーバーライドする場合、「virtual」キーワードは冗長ですか?

C の派生クラスで仮想関数をオーバーライドする場合、「virtual」キーワードは冗長ですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-20 02:35:13959ブラウズ

Is the

派生クラスの仮想関数: "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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。