ホームページ バックエンド開発 C++ C++関数書き換えの詳細解説:親クラス関数オーバーライドの極意

C++関数書き換えの詳細解説:親クラス関数オーバーライドの極意

May 04, 2024 am 08:12 AM
c++ 関数書き換え

C の関数オーバーライドにより、サブクラスが親クラス関数をオーバーライドし、独自の実装を提供できるようになります。サブクラスは、親クラスと同じ名前とパラメーターの型を持つ関数を宣言し、それを override キーワードでマークする必要があります。オーバーライド関数を使用すると、親クラスの機能を拡張したり、サブクラスに特定の実装を提供したり、抽象関数の具体的な実装を提供したりできます。

C++ 函数重写详解:覆盖父类函数的奥妙

# C 関数の書き換えの詳細な説明: 親クラスの関数をオーバーライドする秘密

#概要

関数の書き換えは、C オブジェクト指向プログラミングの強力な機能であり、サブクラスが親クラスの関数を再定義できるようになります。オーバーライドを通じて、サブクラスは親クラスの実装をオーバーライドし、独自の特定の機能を提供できます。

構文

関数を書き直すには、サブクラスは親クラスと同じ名前とパラメーターの型を持つ関数を宣言する必要があります:

class Child : public Parent {
public:
    ReturnType overrideName(ParameterList) override;
};
ログイン後にコピー

ここで:

  • override キーワードは、関数が親クラスの関数をオーバーライドすることを示します。
  • overrideName は、オーバーライド関数の名前です。
  • ParameterList は、オーバーライドされた関数のパラメーター リストです。
  • ReturnType は、オーバーライドされた関数の戻り値の型です (親クラスの関数とは異なる場合があります)。

実際的なケース

面積を計算する関数を含むシェイプ基本クラス

Shapeを考えてみましょうgetArea() ###。サブクラス RectangleCircle はそれぞれ Shape を継承し、独自の面積計算メソッドを提供する必要があります: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>class Shape { public: virtual double getArea() = 0; }; class Rectangle : public Shape { public: Rectangle(double width, double height) : m_width(width), m_height(height) {} double getArea() override { return m_width * m_height; } private: double m_width; double m_height; }; class Circle : public Shape { public: Circle(double radius) : m_radius(radius) {} double getArea() override { return M_PI * m_radius * m_radius; } private: double m_radius; }; int main() { Shape* shapes[] = {new Rectangle(5, 10), new Circle(3)}; for (Shape* shape : shapes) { cout &amp;lt;&amp;lt; &amp;quot;Area: &amp;quot; &amp;lt;&amp;lt; shape-&amp;gt;getArea() &amp;lt;&amp;lt; endl; } return 0; }</pre><div class="contentsignin">ログイン後にコピー</div></div>

Output

Area: 50
Area: 28.2743
ログイン後にコピー
この例では、

Rectangle

CircleShapegetArea() 関数をオーバーライドし、計算を提供します。それぞれのエリア。親クラスのポインタが子クラスのオブジェクトを指している場合、オーバーライドされた関数が呼び出されます。

使用シナリオ

関数の書き換えは通常、次のシナリオで使用されます。

親クラスの関数を拡張または変更する必要がある場合。
  • さまざまなサブクラスに特定の機能を提供する必要がある場合。
  • 基本クラスで抽象関数 (純粋仮想関数) の具体的な実装を提供する必要がある場合。
注意事項

オーバーライドされた関数は、親クラスの関数と同じシグネチャ (名前、パラメーターの型、戻り値の型) を持つ必要があります。
  • 仮想関数の場合、サブクラスでオーバーライドされた関数にはさまざまなアクセス修飾子を含めることができます (たとえば、保護された親クラス関数をパブリック サブクラス関数として書き換えることができます)。
  • サブクラスは、親クラスの非静的関数のみをオーバーライドできます。
  • オーバーライド関数は通常、
  • override
  • キーワードでマークされますが、これは必須ではありません。

以上が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