ホームページ >バックエンド開発 >C#.Net チュートリアル >C++11 の新機能 - ポリモーフィズムと仮想関数、オーバーライド指定子
ポリモーフィズムと仮想関数
ポリモーフィズムは C の重要な機能の 1 つですが、初心者にとっては理解しにくい機能でもあります。まずは簡単な例を見てみましょう:
コードは非常に単純ですが、著者自身の言葉によれば、定義から機能までの重要なポイントを説明します。上記のコードのポリモーフィズムは次のようになります。メイン関数から始めると、これ以上単純にはなりません:
上記のコードには他にも興味深い点があり、結果には影響しませんが、理解しておくとよいでしょう。派生クラスの基本クラスの仮想関数を再定義 (オーバーライド) する場合:
virtual キーワードは必要ありません
オーバーライド仮想関数 2 つの関数の署名が一貫している必要があります。たとえば、次のコードは次のとおりです。
sub2::f1 の署名は、base::f1 の署名と一致しないため、ポリモーフィズムを実現できません。
おそらく、このエラーはあまりにも明白であり、決して起こらないと思われるかもしれません。これは、この例のメンバー関数が単純すぎるためです。実際の開発では、開発規模の拡大に伴いクラスの継承関係はますます深くなり、メンバ関数のパラメータも増加し、派生クラスで定義されたメンバ関数のシグネチャやオーバーライドに遭遇することが多くなります。オブジェクトの署名が矛盾しているため、上書きに失敗します。 そして恐ろしいことに、この種のエラーはコンパイル エラーを引き起こさず、見つけるのも簡単ではありません。オーバーライド指定子
この問題を解決するために、C 11 でメソッドが導入されました。派生クラスでオーバーライド関数を宣言および定義するときにオーバーライド指定子を使用します。
関数の目的は明確であるため、コンパイラが基本クラス内で同じシグネチャを持つ仮想関数を見つけられない場合、コンパイル エラーが発生します。 筆者の感想C言語自体の機能を有効活用し、自動的にエラーを検出する機会を逃さないことがCプログラマの習慣になるはずです。 。職人魂の結晶とも言えます。 関連記事:
c 11 Final およびオーバーライド指定子について詳しく説明しますauto と decltype の違いと関係C 11 の新機能
Android6.0 の新機能以上がC++11 の新機能 - ポリモーフィズムと仮想関数、オーバーライド指定子の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。