ホームページ バックエンド開発 C#.Net チュートリアル C++11 の新機能 - ポリモーフィズムと仮想関数、オーバーライド指定子

C++11 の新機能 - ポリモーフィズムと仮想関数、オーバーライド指定子

Aug 01, 2018 pm 02:11 PM

ポリモーフィズムと仮想関数

ポリモーフィズムは C の重要な機能の 1 つですが、初心者にとっては理解しにくい機能でもあります。まずは簡単な例を見てみましょう:

C++11 の新機能 - ポリモーフィズムと仮想関数、オーバーライド指定子

コードは非常に単純ですが、著者自身の言葉によれば、定義から機能までの重要なポイントを説明します。上記のコードのポリモーフィズムは次のようになります。メイン関数から始めると、これ以上単純にはなりません:

  1. #基本クラスへのポインター

  2. #派生クラスを指すオブジェクト

    派生クラスは、基本クラスで定義された仮想関数をオーバーライドします
  3. この3点は必要条件であり、そのうちの1つは必須です。

上記のコードには他にも興味深い点があり、結果には影響しませんが、理解しておくとよいでしょう。派生クラスの基本クラスの仮想関数を再定義 (オーバーライド) する場合:

  1. virtual キーワードは必要ありません

  2. #関数を public として宣言する必要はありません
  3. オーバーライドの失敗

オーバーライド仮想関数 2 つの関数の署名が一貫している必要があります。たとえば、次のコードは次のとおりです。

C++11 の新機能 - ポリモーフィズムと仮想関数、オーバーライド指定子 sub2::f1 の署名は、base::f1 の署名と一致しないため、ポリモーフィズムを実現できません。

おそらく、このエラーはあまりにも明白であり、決して起こらないと思われるかもしれません。これは、この例のメンバー関数が単純すぎるためです。実際の開発では、開発規模の拡大に伴いクラスの継承関係はますます深くなり、メンバ関数のパラメータも増加し、派生クラスで定義されたメンバ関数のシグネチャやオーバーライドに遭遇することが多くなります。オブジェクトの署名が矛盾しているため、上書きに失敗します。

そして恐ろしいことに、この種のエラーはコンパイル エラーを引き起こさず、見つけるのも簡単ではありません。

オーバーライド指定子

この問題を解決するために、C 11 でメソッドが導入されました。派生クラスでオーバーライド関数を宣言および定義するときにオーバーライド指定子を使用します。

関数の目的は明確であるため、コンパイラが基本クラス内で同じシグネチャを持つ仮想関数を見つけられない場合、コンパイル エラーが発生します。

C++11 の新機能 - ポリモーフィズムと仮想関数、オーバーライド指定子

筆者の感想

C言語自体の機能を有効活用し、自動的にエラーを検出する機会を逃さないことがCプログラマの習慣になるはずです。 。職人魂の結晶とも言えます。 関連記事:

c 11 Final およびオーバーライド指定子について詳しく説明します

auto と decltype の違いと関係C 11 の新機能

関連ビデオ:

Android6.0 の新機能

以上がC++11 の新機能 - ポリモーフィズムと仮想関数、オーバーライド指定子の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

次のレベルのCコンパイラを追加する方法 次のレベルのCコンパイラを追加する方法 Mar 03, 2025 pm 05:44 PM

次のレベルのCコンパイラを追加する方法

C言語のnullの代替案は何ですか C言語のnullの代替案は何ですか Mar 03, 2025 pm 05:37 PM

C言語のnullの代替案は何ですか

C言語コンパイラによるコードをコピーする方法 C言語コンパイラによるコードをコピーする方法 Mar 03, 2025 pm 05:43 PM

C言語コンパイラによるコードをコピーする方法

どの言語コンパイラが優れていますか? どの言語コンパイラが優れていますか? Mar 03, 2025 pm 05:39 PM

どの言語コンパイラが優れていますか?

C言語コンパイラのWebバージョンは何ですか? C言語コンパイラのWebバージョンは何ですか? Mar 03, 2025 pm 05:42 PM

C言語コンパイラのWebバージョンは何ですか?

nullは、C言語での最新のプログラミングではまだ重要ですか? nullは、C言語での最新のプログラミングではまだ重要ですか? Mar 03, 2025 pm 05:35 PM

nullは、C言語での最新のプログラミングではまだ重要ですか?

c言語オンラインプログラミングウェブサイトc言語コンパイラ公式ウェブサイトの要約 c言語オンラインプログラミングウェブサイトc言語コンパイラ公式ウェブサイトの要約 Mar 03, 2025 pm 05:41 PM

c言語オンラインプログラミングウェブサイトc言語コンパイラ公式ウェブサイトの要約

c言語コンパイラインストールチュートリアル(コンピューターバージョン) c言語コンパイラインストールチュートリアル(コンピューターバージョン) Mar 03, 2025 pm 05:41 PM

c言語コンパイラインストールチュートリアル(コンピューターバージョン)

See all articles