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

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

PHPz
PHPzオリジナル
2024-04-26 10:09:02750ブラウズ

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 までご連絡ください。