Différence entre la surcharge de fonctions et la redéfinition de fonctions en C ++
La surcharge et la redéfinition de fonctions sont des exemples de polymorphisme, mais elles sont complètement différentes. Avant de discuter de la différence entre les deux, commençons par en parler un peu.
La surcharge de fonctions
Il fournit plusieurs définitions du fonction en modifiant la signature, c’est-à-dire en changeant le nombre de paramètres, en modifiant le type de données des paramètres, le type de retour ne jouant aucun rôle.
Exemple de signatures d’une fonction surchargée:
void racine_carre(int a); void racine_carre(int a, int b);
Exemple de surcharge:
#include <iostream> using namespace std; //La surcharge de fonctions float multiplication(int, int); float multiplication(float, float); float multiplication(int, float); float multiplication(float, int); int main(){ //Ceci appellera la deuxième fonction cout<<multiplication(12.7f, 2.7f)<<endl; //Ceci appellera la première fonction cout<<multiplication(100, 50)<<endl; //Ceci appellera la troisième fonction cout<<multiplication(50, 10.2f)<<endl; //Ceci appellera la quatrième fonction cout<<multiplication(10.8f, 20)<<endl; return 0; } float multiplication(int a, int b){ return a+b; } float multiplication(float a, float b){ return a+b; } float multiplication(int a, float b){ return a+b; } float multiplication(float a, int b){ return a+b; }
La sortie:
15.4 150 60.2 30.8
La redéfinition de fonctions
La redéfinition de fonctions (arrive au moment de l’exécution) est une fonctionnalité de POO(Programmation Orienté Objet) qui nous permet de redéfinir les méthodes d’une classe mère dans une classe fille avec la même signature, c’est-à-dire le type et les paramètres de retour.
Exemple de redéfinition:
Class X { public: virtual void afficher(){ cout << "Hello World!"; } } Class Y:public X { public: void afficher(){ cout << "Welcome to WayToLearnX!";}; } int main() { Y y; X &x = y; x.afficher(); }
La sortie:
Welcome to WayToLearnX!
Table de comparaison
Surcharge | Redéfinition | |
---|---|---|
Héritage | La surcharge peut se produire sans héritage. | Les fonctions sont écrasées lorsqu’une classe hérite d’une autre classe. |
Signature de fonction: | les fonctions surchargées doivent différer en signature, c’est-à-dire que le nombre de paramètres ou le type de paramètres doit être différent. | En cas de redéfinition, les signatures de fonction doivent être identiques. |
Portée des fonctions | Les fonctions surchargées ont la même portée. | Les fonctions redéfinies ont des portées différentes |
Comportement des fonctions: | La surcharge est utilisée pour avoir des fonctions du même nom, qui se comportent différemment en fonction des paramètres qui leur sont transmis. | la redéfinition est nécessaire lorsque la méthode du classe fille doit effectuer un travail ajouté ou différent de celui de la méthode qui se trouve dans la classe mère. |
Conclusion
Surcharger une méthode (ou une fonction) en C ++ permet de définir des fonctions du même nom, tant que ces méthodes ont des signatures différentes (ensemble de paramètres différent). La redéfinition d’une méthode est la capacité d’une classe fille à réécrire la méthode virtuelle qui se trouve dans la classe mère.