Maison > Article > développement back-end > L'incarnation du polymorphisme dans la surcharge et la réécriture de fonctions C++
Polymorphisme en C++ : la surcharge de fonctions autorise plusieurs fonctions portant le même nom mais des listes d'arguments différentes, la fonction étant choisie pour être exécutée en fonction des types d'arguments lors de son appel. La substitution de fonctions permet à une classe dérivée de redéfinir des méthodes qui existent déjà dans la classe de base, obtenant ainsi différents types de comportement, en fonction du type d'objet.
L'incarnation du polymorphisme dans la surcharge et la réécriture de fonctions C++
Le polymorphisme est l'un des concepts clés de la programmation orientée objet. Il permet à des objets de types différents (classes dérivées) de répondre différemment au même appel de fonction. C++ implémente le polymorphisme via la surcharge et le remplacement de fonctions.
Surcharge de fonctions
La surcharge de fonctions fait référence à 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 lorsqu'elle sera réellement appelée. Par exemple, le code suivant surcharge la fonction area()
, qui peut calculer l'aire d'un cercle ou d'un rectangle : area()
函数,它可以计算圆或矩形的面积:
class Circle { public: double area(double radius) { return 3.14159 * radius * radius; } }; class Rectangle { public: double area(double length, double width) { return length * width; } };
重写
重写是指派生类中重新定义基类中已存在的方法。它允许派生类提供自己的实现,从而实现不同类型的行为。例如,以下代码在派生类 Square
中重写了基类 Rectangle
的 area()
方法来计算正方形的面积:
class Rectangle { public: virtual double area(double length, double width) { return length * width; } }; class Square : public Rectangle { public: virtual double area(double side) override { return side * side; } };
实战案例
考虑一个图形库,其中有 Shape
基类和 Circle
、Rectangle
和 Square
派生类。我们想创建一个函数 draw()
来绘制不同的图形。通过使用重载,我们可以提供不同的 draw()
方法来处理每种形状类型:
struct IShape { virtual void draw() = 0; }; struct Circle : public IShape { void draw() override { // 代码绘制圆 } }; struct Rectangle : public IShape { void draw() override { // 代码绘制矩形 } }; struct Square : public Rectangle { void draw() override { // 代码绘制正方形 } };
在调用 draw()
rrreee
area()
de la classe de base Rectangle
dans la classe dérivée Square
pour calculer l'aire de un carré : 🎜rrreee🎜 🎜Cas pratique🎜🎜🎜Considérons une bibliothèque graphique, qui possède la classe de base Shape
et Circle
, Rectangle
et Carré Classe dérivée. Nous voulons créer une fonction draw()
pour dessiner différentes formes. En utilisant des surcharges, nous pouvons fournir une méthode draw()
différente pour gérer chaque type de forme : 🎜rrreee🎜Lors de l'appel de la méthode draw()
, C++ sélectionnera la fonction correcte. version pour le type d'objet. Cela nous permet d'écrire du code générique pour gérer différents types de graphiques sans avoir besoin de conversions ou de conversions explicites. 🎜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!