ホームページ バックエンド開発 C++ C++ 関数のオーバーロードと仮想関数はどのように連携しますか?

C++ 関数のオーバーロードと仮想関数はどのように連携しますか?

Apr 26, 2024 am 10:09 AM
c++ 関数のオーバーロード 仮想関数

C での関数のオーバーロードを使用すると、異なるパラメーターを持つ同じ名前の関数の異なる実装を定義できます。また、仮想関数により派生クラスの基本クラス関数をオーバーライドしてポリモーフィズムを実現できます。関数のオーバーロードと仮想関数は連携して動作できます。基本クラスで仮想オーバーロード関数を設計することで、派生クラスは特定のパラメーターの組み合わせのバージョンのみをオーバーロードできるため、実際のケースでは異なる型の距離を計算するなど、より柔軟な多態性が提供されます。原点からの形。

C++ 函数重载与虚函数如何协作?

#C における関数のオーバーロードと仮想関数の連携

#はじめにC 言語は、ポリモーフィズムを実現するための 2 つのメカニズム、関数のオーバーロードと仮想関数を提供します。関数のオーバーロードを使用すると、名前は同じだがパラメーターの型に基づいて動作が異なる複数の関数を定義できます。仮想関数は、基本クラスの関数を派生クラスでオーバーライドできるようにすることで、継承におけるポリモーフィズムをサポートします。

関数のオーバーロード

関数のオーバーロードを使用すると、名前は同じだがパラメーター リストが異なる複数の関数の異なる実装を定義できます。コンパイラは、呼び出されたときの引数の型に基づいて正しい関数を選択します。例:

int add(int a, int b) {
  return a + b;
}
double add(double a, double b) {
  return a + b;
}
ログイン後にコピー

使用時:

int sum1 = add(1, 2);  // 呼叫整數版本
double sum2 = add(1.5, 2.3);  // 呼叫浮點版本
ログイン後にコピー

仮想関数

仮想関数を使用すると、派生クラスが基本クラスの関数をオーバーライドできます。仮想関数が基本クラス ポインターを通じて呼び出される場合、派生クラスでオーバーライドされたバージョンが実行されます。例:

class Shape {
public:
  virtual double getArea() const = 0;
};

class Circle : public Shape {
public:
  double getArea() const override {
    return 3.14 * radius * radius;
  }
private:
  double radius;
};
ログイン後にコピー

使用時:

Shape* shape = new Circle(5.0);
double area = shape->getArea();  // 會呼叫 Circle::getArea()
ログイン後にコピー

関数のオーバーロードと仮想関数のコラボレーション

関数のオーバーロードと仮想関数は連携して、より多くの機能を提供できます。柔軟なポリモーフィズム。基本クラスで仮想オーバーロード関数を設計することにより、派生クラスは特定のパラメーターの組み合わせを持つバージョンのみをオーバーロードできます。例:

class Shape {
public:
  virtual double getArea(bool isFilled) const {
    return 0.0;
  }
};

class Circle : public Shape {
public:
  double getArea(bool isFilled) const override {
    if (isFilled) {
      return 3.14 * radius * radius;
    } else {
      return 0.0;
    }
  }
};
ログイン後にコピー

使用する場合:

Shape* shape = new Circle(5.0);
double filledArea = shape->getArea(true);  // 呼叫 Circle::getArea(bool)
double unfilledArea = shape->getArea(false);  // 呼叫 Shape::getArea(bool)
ログイン後にコピー

実用的なケース

次は、計算幾何学における関数のオーバーロードと仮想関数のコラボレーションの使用例です。実際のケース:

class Shape {
public:
  virtual double distanceToOrigin() const = 0;
};

class Point : public Shape {
public:
  double distanceToOrigin() const override {
    return 0.0;
  }
};

class Circle : public Shape {
public:
  double distanceToOrigin() const override {
    return radius;
  }
};

class Rectangle : public Shape {
public:
  double distanceToOrigin() const override {
    return min(x, y);
  }
};

int main() {
  Shape* shapes[] = {new Point(), new Circle(5.0), new Rectangle(3.0, 4.0)};
  for (Shape* shape : shapes) {
    cout << "距離原點: " << shape->distanceToOrigin() << endl;
  }
}
ログイン後にコピー

このコードは、関数のオーバーロードと仮想関数を使用して、さまざまな種類の形状の原点からの距離を計算する方法を示しています。

以上がC++ 関数のオーバーロードと仮想関数はどのように連携しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++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 でカスタム コンパレータを実装するにはどうすればよいですか?

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

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

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

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