Maison  >  Article  >  développement back-end  >  Cas d'application pratiques de surcharge et de réécriture de fonctions C++

Cas d'application pratiques de surcharge et de réécriture de fonctions C++

PHPz
PHPzoriginal
2024-04-20 08:42:02503parcourir

C++ 函数重载和重写的实际应用案例

Cas d'application pratiques de la surcharge et de la réécriture de fonctions C++

Surcharge de fonctions

La surcharge de fonctions permet au même nom de fonction d'avoir différentes implémentations pour gérer différents types ou nombres de paramètres. Par exemple, nous pouvons créer une fonction qui imprime différents types de données :

void print(int value) {
  cout << value << endl;
}

void print(double value) {
  cout << value << endl;
}

int main() {
  int num = 10;
  double number = 12.5;
  print(num); // 调用 print(int)
  print(number); // 调用 print(double)
  return 0;
}

Remplacements de fonctions

Les remplacements de fonctions permettent aux fonctions définies dans une classe dérivée d'avoir des implémentations différentes de celles des fonctions de la classe de base avec le même nom et les mêmes types de paramètres. . Par exemple, nous avons une classe de base Shape qui définit une fonction de calcul de surface : Shape,其中定义了一个计算面积的函数:

class Shape {
public:
  virtual double getArea() = 0; // 虚拟函数声明
};

子类 RectangleCircle 覆盖了 getArea 函数并提供了自己的实现:

class Rectangle: public Shape {
public:
  double width, height;
  Rectangle(double width, double height) : width(width), height(height) {}
  double getArea() override {
    return width * height;
  }
};

class Circle: public Shape {
public:
  double radius;
  Circle(double radius) : radius(radius) {}
  double getArea() override {
    return 3.14 * radius * radius;
  }
};

实战案例

考虑以下示例,它使用函数重载和函数重写来创建一个计算形状面积的程序:

#include <iostream>

using namespace std;

// 基类 Shape
class Shape {
public:
  virtual double getArea() = 0;
};

// 子类 Rectangle
class Rectangle: public Shape {
public:
  double width, height;
  Rectangle(double width, double height) : width(width), height(height) {}
  double getArea() override {
    return width * height;
  }
};

// 子类 Circle
class Circle: public Shape {
public:
  double radius;
  Circle(double radius) : radius(radius) {}
  double getArea() override {
    return 3.14 * radius * radius;
  }
};

// 函数重载用来打印不同类型数据的面积
void printArea(Shape *shape) {
  cout << "Area of the Shape: " << shape->getArea() << endl;
}

int main() {
  Rectangle rectangle(5, 10);
  Circle circle(2);
  printArea(&rectangle);
  printArea(&circle);
  return 0;
}

在这个案例中,Shape 类定义了一个虚拟的 getArea 函数,由子类 RectangleCircle 覆盖。printArea 函数使用函数重载来处理不同类型的 Shaperrreee

Les sous-classes Rectangle et Circle remplacent getArea et fournit sa propre implémentation : 🎜rrreee🎜🎜Un exemple pratique🎜🎜🎜Considérez l'exemple suivant, qui utilise la surcharge de fonctions et la réécriture de fonctions pour créer un programme qui calcule l'aire d'une forme : 🎜rrreee🎜 Dans ce cas, la classe Shape définit une fonction virtuelle getArea, qui est remplacée par les sous-classes Rectangle et Circle. La fonction printArea utilise des surcharges de fonctions pour gérer différents types d'objets Shape et imprimer leurs zones. 🎜

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