Maison > Article > développement back-end > Quelle est la différence entre la surcharge et la réécriture de fonctions C++ ?
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.
Surcharge et réécriture de fonctions C++ : concepts et différences
Surcharge
int sum(int a, int b); double sum(double a, double b);
Override
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!