Maison  >  Article  >  développement back-end  >  Surcharge et remplacement de fonctions C++

Surcharge et remplacement de fonctions C++

王林
王林original
2024-04-12 12:12:02877parcourir

La surcharge et le remplacement sont des concepts différents en C++. La surcharge permet la création d'une fonction portant le même nom, avec une liste de paramètres différente, tandis que la substitution permet à une fonction de classe dérivée de remplacer une fonction de classe de base portant le même nom. En cas de surcharge, le nom de la fonction est le même mais la liste des paramètres est différente, en cas de substitution, le nom de la fonction et la liste des paramètres doivent être les mêmes et la fonction de classe dérivée doit utiliser le mot-clé override. La surcharge et le remplacement des fonctions C++ sont deux concepts différents en C++. La surcharge permet la création de fonctions portant le même nom mais des listes de paramètres différentes, tandis que la substitution permet à une fonction d'une classe dérivée de remplacer une fonction du même nom dans une classe de base.

C++ 函数的重载和覆盖Surcharges

Supposons que nous ayons une fonction appelée area qui calcule l'aire de différentes formes en fonction de différents paramètres d'entrée :

int area(int length, int width);  // 矩形面积
double area(double radius);  // 圆形面积

Ces fonctions surchargent area nom car ils ont des listes de paramètres différentes. Ils sont capables de traiter différents types de données et d’effectuer différents calculs. <p><strong></strong>Override</p> <p></p>Maintenant, en supposant que nous ayons une classe de base <code>Shape, qui a une fonction virtuelle area :

class Shape {
public:
    virtual double area() const = 0;
};
Nous pouvons créer une classe dérivée Rectangle et Circle, et remplacez la fonction area :
class Rectangle : public Shape {
public:
    double area() const override { return length * width; }
    int length, width;  // 矩形属性
};

class Circle : public Shape {
public:
    double area() const override { return Math.PI * radius * radius; }
    double radius;  // 圆形属性
};

Dans la classe dérivée, nous remplaçons explicitement le parent via le override mot clé La fonction area de la classe. La fonction remplacée doit avoir le même type de retour et le même nom que la fonction parent.

area 的函数,它根据不同的输入参数计算不同形状的面积:

#include <iostream>
#include <cmath>

using namespace std;

class Shape {
public:
    virtual double area() const = 0;
};

class Rectangle : public Shape {
public:
    double area() const override { return length * width; }
    int length, width;
};

class Circle : public Shape {
public:
    double area() const override { return Math.PI * radius * radius; }
    double radius;
};

int main() {
    // 创建矩形对象
    Rectangle rectangle;
    rectangle.length = 5;
    rectangle.width = 3;

    // 创建圆形对象
    Circle circle;
    circle.radius = 2;

    // 计算并输出矩形和圆形的面积
    cout << "矩形面积:" << rectangle.area() << endl;
    cout << "圆形面积:" << circle.area() << endl;
}

这些函数重载了 area 名称,因为它们有不同的参数列表。它们能够处理不同类型的数据并执行不同的计算。

覆盖

现在,假定我们有一个基类 Shape,它有一个 area 虚拟函数:

矩形面积:15
圆形面积:12.566370614359172

我们可以创建派生类 RectangleCircle,并覆盖 area 函数:

rrreee

在派生类中,我们通过 override 关键字显式覆盖父类的 area

Cas pratique

Nous créons un programme pour démontrer la surcharge et le remplacement :

rrreee

Résultats de sortie :

rrreee

Cet exemple montre comment créer des fonctions avec différentes fonctions par surcharge et remplacement.

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