Maison  >  Article  >  développement back-end  >  Comment distinguer la surcharge de fonctions et la réécriture en C++

Comment distinguer la surcharge de fonctions et la réécriture en C++

WBOY
WBOYoriginal
2024-04-19 16:21:011017parcourir

La surcharge de fonctions autorise des fonctions avec le même nom mais des signatures différentes dans une classe, tandis que le remplacement de fonctions se produit dans une classe dérivée lorsqu'elle remplace une fonction avec la même signature dans la classe de base, offrant un comportement différent. La différence entre la surcharge de fonctions et la réécriture en C++ est différente.

如何区分 C++ 中函数重载和重写Syntaxe :

return_type function_name(parameter_types) {
  // 函数体
}

// 另一个重载
return_type function_name(other_parameter_types) {
  // 另一个函数体
}
Exemple pratique :

Considérons une classe appelée AreaCalculator qui calcule l'aire de différentes formes :

class AreaCalculator {
public:
  double Area(double radius) {
    return M_PI * radius * radius;
  }

  double Area(double length, double width) {
    return length * width;
  }

  double Area(int numOfSides, double sideLength) {
    // 正多边形的面积公式
    // ... 省略后面代码
  }
};

Ici, Area code> La fonction est surchargée pour accepter différents nombres et types d'arguments, permettant de calculer différentes zones en fonction du type de forme.

Remplacement de fonction

Le remplacement de fonction se produit dans une classe dérivée lorsqu'elle remplace une fonction avec la même signature (nom et types de paramètres) dans la classe de base. Les fonctions remplacées dans les classes dérivées se comportent souvent différemment des fonctions dans les classes de base.

Syntaxe :

class DerivedClass : public BaseClass {
public:
  // 重写基类中的函数
  return_type function_name(parameter_types) {
    // 重写的函数体
  }
};
AreaCalculator 的类,它计算不同形状的面积:

class Shape {
public:
  virtual void Draw() {
    // 绘制通用形状
    // ... 省略后面代码
  }
};

在这里,Area 函数被重载以接收不同数量和类型的参数,允许根据形状类型计算不同的面积。

函数重写

函数重写发生在派生类中,当它覆盖基类中具有相同签名(名称和参数类型)的函数时。派生类中的重写函数的行为通常不同于基类中的函数。

语法:

class Circle : public Shape {
public:
  void Draw() override {
    // 绘制圆形
    // ... 省略后面代码
  }
};

实战案例:

考虑一个名为 Shape 的基类,它定义了一个 Draw 函数来绘制形状:

rrreee

派生类 Circle 可以重写 Draw 函数来专门绘制圆形:

rrreee

通过重写,Circle 类的 Draw 函数将覆盖 Shape 类中的 Draw

Cas pratique : 🎜🎜🎜Considérons une classe de base nommée Shape, qui définit une fonction Draw pour dessiner une forme : 🎜 rrreee🎜 La classe dérivée Circle peut remplacer la fonction Draw pour dessiner spécifiquement des cercles : 🎜rrreee🎜En remplaçant, le The DrawCircle La fonction /code> remplace la fonction Draw dans la classe Shape et fournit une implémentation de dessin plus spécifique. 🎜

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