Surcharge de fonction

ensemble de fonctions de même nom, en programmation logicielle

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érateursModifier

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++.

CatalogueModifier

Exemple de surcharge en C++Modifier

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érencesModifier

  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 aussiModifier

Sur les autres projets Wikimedia :