Maison  >  Article  >  développement back-end  >  Quelle est la différence entre la surcharge et la réécriture de fonctions C++ ?

Quelle est la différence entre la surcharge et la réécriture de fonctions C++ ?

WBOY
WBOYoriginal
2024-04-13 18:06:01851parcourir

Surcharge et réécriture de fonctions C++ : Surcharge : les fonctions portant le même nom ont des types ou des numéros de paramètres différents, et la version appropriée est sélectionnée lors de la compilation. Réécriture : une fonction dans une classe dérivée portant le même nom que la classe de base remplace l'implémentation de la classe de base et fournit une implémentation spécifique pour la classe dérivée. Caractéristiques de surcharge : différents types ou numéros de paramètres, liés au moment de la compilation. Caractéristiques prioritaires : mêmes type et numéro de paramètre, liaison d'exécution, héritage requis.

C++ 函数重载与重写有何区别?

Surcharge et réécriture de fonctions C++ : concepts et différences

Surcharge

  • Définition : Une fonction avec le même nom de fonction mais des types ou des numéros de paramètres différents.
  • Sémantique : Le compilateur choisit la version de fonction appropriée en fonction du type d'argument ou du numéro au moment de l'appel.
  • Syntaxe :
int sum(int a, int b);
double sum(double a, double b);

Override

  • Définition : Une fonction dans une classe dérivée avec le même nom et la même signature que la classe de base.
  • Sémantique : Une fonction substituée dans une classe dérivée remplacera la fonction du même nom dans la classe de base, fournissant ainsi une implémentation spécifique de la classe dérivée.
  • Syntaxe :
class Base {
public:
    virtual int add(int a, int b);
};

class Derived : public Base {
public:
    int add(int a, int b) override;
};

Différence

Fonctionnalités Surcharge Réécriture
Niveau d'accès Public ou Privé Public ou protégé
Héritage Non requis Obligatoire
Paramètres Différents types ou numéros de paramètres Même type et numéro de paramètre
Liaison Temps de compilation Exécution
Portée Idem Au sein de la classe Dans la classe de base et la classe dérivée

Cas pratique

Surcharge : Calculer la somme de différents types de nombres

#include <iostream>

using namespace std;

int sum(int a, int b) {
    return a + b;
}

double sum(double a, double b) {
    return a + b;
}

int main() {
    cout << "整数之和:" << sum(1, 2) << endl;
    cout << "浮点数之和:" << sum(1.5, 2.5) << endl;
    return 0;
}

Réécrire : Utiliser le polymorphisme pour calculer l'aire de différentes formes

#include <iostream>

using namespace std;

class Shape {
public:
    virtual double area() = 0; // 纯虚函数
};

class Rectangle : public Shape {
public:
    Rectangle(double length, double width) : length(length), width(width) {}

    double area() override {
        return length * width;
    }

private:
    double length;
    double width;
};

class Circle : public Shape {
public:
    Circle(double radius) : radius(radius) {}

    double area() override {
        return 3.14 * radius * radius;
    }

private:
    double radius;
};

int main() {
    Shape* shapes[] = {new Rectangle(5, 10), new Circle(4)};

    for (int i = 0; i < 2; i++) {
        cout << "面积:" << shapes[i]->area() << endl;
    }

    return 0;
}

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