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

Article détaillé : Définition d'opérateur.

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

  1. (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
  2. (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
  3. Marius Vasiliu, Le langage C++, Pearson Education France, 2005
  4. Benjamin Aumaille, J2SE : les fondamentaux de la programmation Java, Editions ENI, 2002

Voir aussi

Sur les autres projets Wikimedia :

  • Surcharge de fonction, sur Wikibooks


  • Cet article est partiellement ou en totalité issu de l'article intitulé « Surcharge des opérateurs » (voir la liste des auteurs).
v · m
Bibliothèque logicielle
Vocabulaire
Fonctions
Objet
Événementiel Inversion de contrôle
Code source
Structures de données
Déclarations
Structures de contrôle
Fonctions usuelles
Outil de développement
Folklore
Catégories :
  • Programmation informatique
  • Développement logiciel
  • icône décorative Portail de la programmation informatique