Maison  >  Article  >  développement back-end  >  Comment la surcharge de fonctions C++ et les fonctions virtuelles fonctionnent-elles ensemble ?

Comment la surcharge de fonctions C++ et les fonctions virtuelles fonctionnent-elles ensemble ?

PHPz
PHPzoriginal
2024-04-26 10:09:02750parcourir

La surcharge de fonctions en C++ permet de définir différentes implémentations pour les fonctions du même nom avec des paramètres différents, tandis que les fonctions virtuelles permettent de remplacer les fonctions de la classe de base dans les classes dérivées pour obtenir un polymorphisme. La surcharge de fonctions et les fonctions virtuelles peuvent fonctionner ensemble.En concevant une fonction virtuelle surchargée dans la classe de base, la classe dérivée ne peut surcharger que les versions de combinaisons de paramètres spécifiques, offrant ainsi un polymorphisme plus flexible, comme le calcul de différents types dans des cas pratiques. forme depuis son origine.

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

Coopération de la surcharge de fonctions et des fonctions virtuelles en C++

Introduction

Le langage C++ fournit deux mécanismes pour réaliser le polymorphisme : la surcharge de fonctions et les fonctions virtuelles. La surcharge de fonctions permet de définir plusieurs fonctions avec le même nom mais un comportement différent en fonction des types de paramètres. Les fonctions virtuelles permettent de remplacer les fonctions d'une classe de base dans une classe dérivée, prenant ainsi en charge le polymorphisme dans l'héritage.

Surcharge de fonctions

La surcharge de fonctions permet de définir différentes implémentations pour plusieurs fonctions portant le même nom mais des listes de paramètres différentes. Le compilateur choisira la fonction correcte en fonction des types d'arguments lors de son appel. Par exemple :

int add(int a, int b) {
  return a + b;
}
double add(double a, double b) {
  return a + b;
}

Lorsqu'il est utilisé :

int sum1 = add(1, 2);  // 呼叫整數版本
double sum2 = add(1.5, 2.3);  // 呼叫浮點版本

Fonctions virtuelles

Les fonctions virtuelles permettent de remplacer les fonctions d'une classe de base dans une classe dérivée. Lorsqu'une fonction virtuelle est appelée via un pointeur de classe de base, la version remplacée dans la classe dérivée est exécutée. Par exemple :

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;
};

Lorsqu'il est utilisé :

Shape* shape = new Circle(5.0);
double area = shape->getArea();  // 會呼叫 Circle::getArea()

Collaboration entre la surcharge de fonctions et les fonctions virtuelles

La surcharge de fonctions et les fonctions virtuelles peuvent fonctionner ensemble pour fournir un polymorphisme plus flexible. En concevant une fonction virtuelle surchargée dans la classe de base, une classe dérivée ne peut surcharger que les versions avec des combinaisons de paramètres spécifiques. Par exemple :

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;
    }
  }
};

Lorsqu'il est utilisé :

Shape* shape = new Circle(5.0);
double filledArea = shape->getArea(true);  // 呼叫 Circle::getArea(bool)
double unfilledArea = shape->getArea(false);  // 呼叫 Shape::getArea(bool)

Un exemple pratique

Ce qui suit est un exemple pratique d'utilisation de la surcharge de fonctions et de la collaboration de fonctions virtuelles en géométrie computationnelle :

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;
  }
}

Ce code démontre l'utilisation de la surcharge de fonctions et de Virtual les fonctions calculent la distance depuis l'origine pour différents types de formes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn