Les fonctions en C++ : surcharge et paramètres par défaut.


Les fonctions en C++ : surcharge et paramètres par défaut.



En C++, une même fonction ou méthode de classe peut être surchargée, et avoir ce que l'on appelle des paramètres par défauts. Cette qualité est aussi valable pour les constructeurs de classes.

La surcharge de fonctions et méthodes de classes, dont le constructeur



Lorsqu'on surcharge une fonction, on la déclare deux ou plus de fois, en gardant le même nom, et
le même type de retour. Modifier le type de retour correspondrait alors au polymorphisme.

Exemple : Polygone.hpp

#include <iostream> 

using namespace std; 

class Polygone { 

public :  

Polygone(); 
Polygone(int nombreCote); 
Polygone(int nombreCote, bool regulier); 
Polygone(bool regulier); 

void setRegulier()  { cout << "Chouette ! Je suis regulier !" << endl; 
                      regulier = true; } 
                       
void setPolygone(int nbCote) { sonNombreCote = nbCote; } 

void setTaille(int tailleCote1) { cout << "Je connait la taille de mon premier coté : il mesure " << tailleCote1 << " cm." << endl; 
                                  saTailleCote1 = tailleCote1; } 
                                   
void setTaille(int tailleCote1, int tailleCote2)  
{ cout << "Je connait la taille de mon premier cote : il mesure " << tailleCote1 << " cm." << endl; 
  cout << "Je connait la taille de mon deuxieme cote : il mesure " << tailleCote2 << " cm." << endl; 

  saTailleCote1 = tailleCote1; 
  saTailleCote2 = tailleCote2; } 
                                                    
void setTaille(int tailleCote1, int tailleCote2, int tailleCote3)  
{ cout << "Je connait la taille de mon premier cote : il mesure " << tailleCote1 << " cm." << endl;                                                                 
  cout << "Je connait la taille de mon deuxieme cote : il mesure " << tailleCote2 << " cm." << endl; 
  cout << "Je connait la taille de mon troisieme cote : il mesure " << tailleCote3 << " cm." << endl; 

  saTailleCote1 = tailleCote1; 
  saTailleCote2 = tailleCote2; 
  saTailleCote3 = tailleCote3; } 

private : 

bool regulier; 
int sonNombreCote; 
int saTailleCote1; 
int saTailleCote2; 
int saTailleCote3; 

};


Cette exemple illustre la déclaration de la classe Polygone, qui utilise la surcharge du constructeur, et
de la fonction setTaille();

Voyons maintenant Polygone.cpp :

#include "polygone.hpp" 

using namespace std; 

Polygone::Polygone() { 

cout << endl << "Je suis un polygone, mais je ne sais pas si je suis regulier, ni combien j'ai de cotes, ni leur taille." << endl; 

} 

Polygone::Polygone(int nombreCote) { 

cout<< endl << "Je suis un polygone a " << nombreCote << " cotes mais je ne connait pas leur taille, et je ne sais pas si je suis regulier." << endl; 
sonNombreCote = nombreCote; 

} 

Polygone::Polygone(int nombreCote, bool regulier) { 

cout << endl << "Je suis un polygone a " << nombreCote << " cotes mais je ne connait pas leur taille."; 
if(regulier == true) 
     cout << " Je suis regulier !" << endl; 
else cout << " Je ne suis pas regulier." << endl; 
sonNombreCote = nombreCote; 
regulier = true; 

} 

Dans cet exemple, nous voyons l'implémentation de méthodes surchargées.
Cela se passe exactement de la même façon pour les fonctions non membres.

Vous pouvez tester ces deux fichiers avec ce fichier main.cpp :
#include "polygone.hpp" 
#include <iostream> 

using namespace std; 

int main(int argc, char *argv[]) 
{ 
    cout << endl << "Polygone simple : "; 
    Polygone polygoneSimple; 
     
    cout << endl << "Polygone a trois cotes : "; 
    Polygone polygoneATroisCotes(3); 
     
    cout << endl << "Polygone a 7 cotes : "; 
    Polygone polygoneASeptCotesRegulier(7, true); 
     
    cout << endl << "Polygone simple : "; 
    polygoneSimple.setRegulier(); 
     
    cout << endl << "Polygone a trois cotes : " << endl; 
    polygoneATroisCotes.setTaille(5, 7, 1); 
     
    cout << endl << "Polygone a 7 cotes : " << endl; 
    polygoneASeptCotesRegulier.setTaille(1, 90); 
     
    cout << endl << endl; 
    system("PAUSE"); 
    return EXIT_SUCCESS; 
}


Vous pouvez voir que le code est satisfaisant.

Utilisation des paramètres par défaut


Utiliser les paramètres par défauts peut s'avérer utile lorsque vous ne connaissez pas la valeur
de certains paramètres, alors qu'une fonction les attend.

Lors de la déclaration, les paramètres par défaut doivent se trouver au plus à droite.

exemple : redéfinition de la fonction setTaille :

void setTaille(int tailleCote1 = 5, int tailleCote2 = 8, int tailleCote3 = 4)  
{ cout << "Je connait la taille de mon premier cote : il mesure " << tailleCote1 << " cm." << endl;                                                                 
  cout << "Je connait la taille de mon deuxieme cote : il mesure " << tailleCote2 << " cm." << endl; 
  cout << "Je connait la taille de mon troisieme cote : il mesure " << tailleCote3 << " cm." << endl; 

  saTailleCote1 = tailleCote1; 
  saTailleCote2 = tailleCote2; 
  saTailleCote3 = tailleCote3; } 


Cela est d'une simplicité remarquable. Regardez maintenant l'utilisation avec main.cpp, lui aussi
changé pour plus d'utilité :

#include "polygone.hpp" 

using namespace std; 

int main(int argc, char *argv[]) 
{ 
    cout << endl << "Polygone simple : "; 
    Polygone polygoneSimple; 
     
    cout << endl << "Polygone a trois cotes : "; 
    Polygone polygoneATroisCotes(3); 
     
    cout << endl << "Polygone a 7 cotes : "; 
    Polygone polygoneASeptCotesRegulier(7, true); 
     
    cout << endl << "Polygone simple : "; 
    polygoneSimple.setTaille(); 
     
    cout << endl << "Polygone a trois cotes : " << endl; 
    polygoneATroisCotes.setTaille(1, 90); 
     
    cout << endl << "Polygone a 7 cotes : " << endl; 
    polygoneASeptCotesRegulier.setTaille(); 
     
    cout << endl << endl; 
    system("PAUSE"); 
    return EXIT_SUCCESS; 
}


Vous pouvez tester ce code.
Publié par HACKER 712 - Dernière mise à jour le 23 juin 2011 à 17:04 par @ntoine
Ce document intitulé « Les fonctions en C++ : surcharge et paramètres par défaut. » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Suggestions
  •  Les fonctions en C++ : surcharge et paramètres par défaut.
  •  JAVA - Parametre Default (Résolu) » Bonjour, Je travaille sur eclipse, langage JAVA et j'aimerais savoir si je peux declarer une meme fonction 2 fois avec differents parametres. Je m'explique: Pour ceux qui connaissent C++, une ecriture pareille: void example (int i = 0) { cout<<"i"; //...
  •  Word 2007 - Paramètres par défaut (Résolu) » Meilleure réponse: Bonsoir, Effectivement, si tu crées un nouveau fichier de cette façon, il est vide de tout formatage. Un fichier word 2007 est de l'xml compressé. Crée un nouveau dossier via Fichier, Nouveau, puis un autre depuis un clic droit dans un
  •  Barre d'outils orange (Résolu) » Bonjour, Je viens d'essayer d'installer "Notification mail" + barre d'outils,dans ma messagerie orange internet j'ai un message d'orange inside: vous tentez de modifier vos paramètres par défaut je clique sur garder les paramètres orange et cela ne...
  •  Java - Constructeurs » Articles : Le constructeur: une méthode particulière Pour instancier une classe, c'est-à-dire créer un objet à partir d'une classe, il s'agit d'utiliser l'opérateur new. En réalité l'opérateur new, lorsqu'il est utilisé, fait appel à une méthode spéciale de...
  •  Réinitialiser son navigateur » Fiches pratiques : Redirection du navigateur Internet Si votre navigateur plante, rame,... il est parfois utile de le restaurer à ses valeurs par défaut pour pouvoir repartir sur de bonnes bases. Attention : Avant d'effectuer cette manipulation il est préférable...
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?
La saisie sécurisée en C++
Windows - Compiler un projet Qt simplement