ホームページ バックエンド開発 C++ C++ 関数の書き換え: 柔軟な継承の新しい章の幕開け

C++ 関数の書き換え: 柔軟な継承の新しい章の幕開け

May 03, 2024 pm 02:03 PM
c++ 関数書き換え

C 関数の書き換えにより、サブクラスが親クラスの関数をオーバーライドできるようになり、ポリモーフィズムが達成され、継承の柔軟性がもたらされます。関数を書き換える場合、サブクラス関数のシグネチャは、override キーワードで識別される親クラス関数とまったく同じである必要があります。利点には、柔軟性、ポリモーフィズム、コードの再利用が含まれます。ただし、署名一致ルールと最終修飾子はオーバーライドできないことに注意してください。

C++ 函数重写:开启灵活继承的全新篇章

#C 関数の書き換え: 柔軟な継承の新しい章の幕開け

#序文

関数オーバーライドは、サブクラスが親クラスの関数をオーバーライドできるようにする強力な C 機能であり、それによってポリモーフィズムを実現します。これにより、柔軟な継承の新たな可能性が開かれ、親クラスの基礎となる機能を保持しながら、サブクラスがその動作をカスタマイズできるようになります。

構文

関数をオーバーライドするには、サブクラスは親クラスの関数と同じシグネチャを持つ新しい関数を宣言する必要があります。新しい関数の戻り値の型、パラメーター、および名前は、親クラスの関数とまったく同じである必要があります。関数をオーバーライドするための構文は次のとおりです。

returntype ClassName::functionName(parameters) {
  // 子类的函数体
}
ログイン後にコピー

ここで、

returntype は関数の戻り値の型、 ClassName はサブクラスの名前、 functionName は書き換える関数の名前、parameters は関数のパラメーターのリストです。

実践的なケース

次のような親クラスを考えてみましょう:

class Shape {
public:
  virtual double area() { return 0.0; }
};
ログイン後にコピー

サブクラス

Rectangle を作成したいと考えています。同じ 親クラスの同じ area() 関数ですが、独自の実装を提供します:

class Rectangle : public Shape {
public:
  double length;
  double width;

  Rectangle(double l, double w) : length(l), width(w) {}

  double area() override {
    return length * width;
  }
};
ログイン後にコピー

サブクラス

Rectangle で、area() をオーバーライドします。 関数を追加し、四角形の寸法を保存するための length および width メンバー変数を追加しました。 override キーワードを使用すると、関数が親クラスの関数をオーバーライドしていることを明示的に示すことができます。

利点

関数のオーバーライドには次の利点があります。

  • 柔軟性: サブクラスのカスタマイズが可能親クラスの基本機能を保持します。
  • ポリモーフィズム: 基本クラス ポインターを介したさまざまなタイプのオブジェクトの参照と、適切にオーバーライドされた関数の呼び出しをサポートします。
  • コードの再利用: コードの重複を避けるために、親クラスの共通関数をサブクラスで共有できます。

    関数の書き換えは「シグネチャ マッチング」ルールに従います。つまり、サブクラス関数の戻り値の型、パラメーター、および名前は次のとおりです。親クラスの関数と同じです。クラスの関数は同じです。
  • サブクラス関数が親クラス関数をオーバーライドしない場合、コンパイラは警告を発行します。
  • 親クラスの関数が
  • final として宣言されている場合、サブクラスでオーバーライドすることはできません。

以上がC++ 関数の書き換え: 柔軟な継承の新しい章の幕開けの詳細内容です。詳細については、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++ 同時プログラミングにおけるデータ構造の同時実行安全設計? Jun 05, 2024 am 11:00 AM

C++ 同時プログラミングにおけるデータ構造の同時実行安全設計?

C++ オブジェクトのレイアウトはメモリに合わせて調整され、メモリの使用効率が最適化されます。 C++ オブジェクトのレイアウトはメモリに合わせて調整され、メモリの使用効率が最適化されます。 Jun 05, 2024 pm 01:02 PM

C++ オブジェクトのレイアウトはメモリに合わせて調整され、メモリの使用効率が最適化されます。

C++ STL でカスタム コンパレータを実装するにはどうすればよいですか? C++ STL でカスタム コンパレータを実装するにはどうすればよいですか? Jun 05, 2024 am 11:50 AM

C++ STL でカスタム コンパレータを実装するにはどうすればよいですか?

C++ で戦略デザイン パターンを実装するにはどうすればよいですか? C++ で戦略デザイン パターンを実装するにはどうすればよいですか? Jun 06, 2024 pm 04:16 PM

C++ で戦略デザイン パターンを実装するにはどうすればよいですか?

Golang と C++ の類似点と相違点 Golang と C++ の類似点と相違点 Jun 05, 2024 pm 06:12 PM

Golang と C++ の類似点と相違点

C++ STL コンテナをコピーするにはどうすればよいですか? C++ STL コンテナをコピーするにはどうすればよいですか? Jun 05, 2024 am 11:51 AM

C++ STL コンテナをコピーするにはどうすればよいですか?

C++ スマート ポインターの基本的な実装原則は何ですか? C++ スマート ポインターの基本的な実装原則は何ですか? Jun 05, 2024 pm 01:17 PM

C++ スマート ポインターの基本的な実装原則は何ですか?

Actor モデルに基づいて C++ マルチスレッド プログラミングを実装するにはどうすればよいですか? Actor モデルに基づいて C++ マルチスレッド プログラミングを実装するにはどうすればよいですか? Jun 05, 2024 am 11:49 AM

Actor モデルに基づいて C++ マルチスレッド プログラミングを実装するにはどうすればよいですか?

See all articles