Maison  >  Article  >  développement back-end  >  L'incarnation du polymorphisme dans la surcharge et la réécriture de fonctions C++

L'incarnation du polymorphisme dans la surcharge et la réécriture de fonctions C++

PHPz
PHPzoriginal
2024-04-20 11:03:02574parcourir

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.

C++ 函数重载和重写中多态性的体现

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 中重写了基类 Rectanglearea() 方法来计算正方形的面积:

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 基类和 CircleRectangleSquare 派生类。我们想创建一个函数 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

🎜Overriding🎜🎜🎜Overriding signifie que la classe dérivée redéfinit l'aire de la méthode d'existence de la classe de base. Il permet aux classes dérivées de fournir leurs propres implémentations, permettant différents types de comportement. Par exemple, le code suivant remplace la méthode 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!

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