C++ 関数継承の詳細説明: 仮想関数を使用してコードの再利用を実現するには?

王林
リリース: 2024-05-04 10:54:01
オリジナル
1009 人が閲覧しました

関数の継承により、派生クラスが基本クラスの関数を継承して再利用できるようになります。仮想関数を使用すると、コードの再利用が可能になり、派生クラスが基本クラスの同じ名前の関数をオーバーライドし、呼び出し元オブジェクトのタイプに基づいて異なる関数バージョンを動的に実行できます。

C++ 函数继承详解:如何使用虚函数实现代码复用?

# C 関数継承の詳細な説明: 仮想関数を使用してコードの再利用を実現する方法

はじめに

関数の継承はオブジェクト指向プログラミング (OOP) における重要な手法であり、派生クラスが基本クラスの関数を継承して再利用できるようになります。仮想関数を使用すると、より柔軟でスケーラブルなコードの再利用が実現できます。

仮想関数とは何ですか?

仮想関数は、派生クラスが基本クラスの同じ名前の関数をオーバーライドできるようにする特別なメンバー関数です。仮想関数が呼び出されるとき、実行される実際の関数のバージョンは、呼び出し元のオブジェクト タイプに基づいて動的に決定されます。

構文

仮想関数は、キーワード

virtual を使用して宣言されます。例:

class Base {
public:
  virtual void print() const; // 虚函数
};
ログイン後にコピー

コードの再利用

仮想関数を使用することで、コードの再利用を実現できます。たとえば、

draw() 関数を含む基本クラス Shape があるとします。

class Shape {
public:
  virtual void draw() const;
};
ログイン後にコピー

Circle などのさまざまな Shape クラスを派生できます。 Rectangle を作成し、それぞれの形状に対して独自の draw() 関数を実装します。

class Circle : public Shape {
public:
  void draw() const override;
};

class Rectangle : public Shape {
public:
  void draw() const override;
};
ログイン後にコピー
を作成するとき Circle

Rectangle オブジェクトが呼び出され、その draw() 関数が呼び出されると、対応する派生クラス関数が実行されて、さまざまな描画動作が実現されます。 実際的なケース

次のコード スニペットについて考えてみましょう。これは、仮想関数を使用してコードの再利用を実現する方法を示しています。

#include <iostream>

using namespace std;

class Shape {
public:
  virtual void draw() const {
    cout << "Drawing a generic shape" << endl;
  }
};

class Circle : public Shape {
public:
  void draw() const override {
    cout << "Drawing a circle" << endl;
  }
};

class Rectangle : public Shape {
public:
  void draw() const override {
    cout << "Drawing a rectangle" << endl;
  }
};

int main() {
  Shape* shapes[] = {new Circle(), new Rectangle()};

  for (int i = 0; i < 2; i++) {
    shapes[i]->draw();
  }

  return 0;
}
ログイン後にコピー

このコードを実行すると、次のコードが表示されます。次の出力:

Drawing a circle
Drawing a rectangle
ログイン後にコピー

この場合、

Shape

クラスが基本クラスであり、仮想関数

draw() が含まれています。 CircleRectangle は、draw() 関数をオーバーライドして形状固有の描画動作を提供する派生クラスです。仮想関数を使用すると、特定の型を知らなくても、さまざまな形状の draw() 関数を簡単に呼び出すことができます。

以上がC++ 関数継承の詳細説明: 仮想関数を使用してコードの再利用を実現するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート