Surcharge de fonction
La surcharge de fonction (également connue sous le nom de surdéfinition, polymorphisme ad hoc ou overloading en anglais) est une possibilité offerte par certains langages de programmation de définir plusieurs fonctions ou méthodes de même nom, mais qui diffèrent par le nombre ou le type des paramètres effectifs.
Le polymorphisme ad hoc ne doit pas être confondu avec le polymorphisme d'inclusion des langages à objets, permis par l'héritage de classe et la redéfinition de méthode (overriding en anglais).
La surcharge peut être statique (le choix de la version est alors fait en fonction du nombre d'arguments et de leur type statique déclaré à la compilation) ou dynamique (le choix de la version est alors fait en fonction du type dynamique des arguments constaté à l'exécution). La surcharge dynamique est également appelée « dispatch multiple » et une méthode surchargée dynamiquement « multiméthode ».
Surcharge d'opérateurs
La surcharge des opérateurs tels que +
, -
, ou *
permet au programmeur d'utiliser des opérateurs avec des types eux aussi définis par le programmeur. C'est utile lorsque ces types représentent des valeurs conventionnellement utilisées avec des opérateurs (nombre complexe[1], matrice[2]) ou sont très utilisés comme le type std::string
de C++.
Catalogue
- Langages qui proposent la surcharge statique : C++[3], C#, Free Pascal, D, Haskell, Prolog, Java[4].
- Langages qui proposent la surcharge dynamique : Common Lisp, Julia.
- Langages qui ne proposent pas la surcharge : C, Visual Basic.
Exemple de surcharge en C++
Un exemple classique de surcharge en C++, la conversion de différents types en chaîne de caractère (assurée dans son standard par std::to_string
).
#include <iostream>
#include <string>
#include <sstream>
std::string toString(const double a) {
std::ostringstream strs;
strs << a;
return strs.str();
}
std::string toString(const unsigned int a) {
std::ostringstream strs;
strs << a;
return strs.str();
}
int main() {
unsigned int age = 10;
std::cout << "Ton age est de " << toString(age) << " ans" << std::endl;
}
Notes et références
- (en) Bjarne Stroustrup, A Tour of C++, Addison-Wesley, coll. « C++ In-Depth Series », , 240 p. (ISBN 978-0-13-499783-4), 4.2.1 An Arithmetic Type
- (en) Bjarne Stroustrup, A Tour of C++, Addison-Wesley, coll. « C++ In-Depth Series », , 240 p. (ISBN 978-0-13-499783-4), 3.6.2 Value Return
- Marius Vasiliu, Le langage C++, Pearson Education France, 2005
- Benjamin Aumaille, J2SE : les fondamentaux de la programmation Java, Editions ENI, 2002
Voir aussi
- Cet article est partiellement ou en totalité issu de l'article intitulé « Surcharge des opérateurs » (voir la liste des auteurs).