====== Les fonctions surchargées ======
===== Les limitations de la déclaration en C =====
En C, chaque fonction doit avoir un nom différent. Si deux fonctions ont le même nom, alors, le compilateur va générer une erreur.
Cette limitation empêche de pouvoir écrie du code facilement lisible. Ainsi supposons que nous souhaitons définir une fonction identité, il faudrait écrire pour chaque type d'argument un nom de fonction différent :
int id_int(int x) { return x; }
int id_float(float x) { return x; }
int id_double(double x) { return x; }
int id_unsigned(unsigned x) { return x; }
===== La notion de surcharge =====
Un nom de fonction est surchargé si ce nom désigne non pas une fonction mais plusieurs fonctions qui différent seulement par la liste des arguments. Alors comment le compilateur peut savoir quelle fonction il doit appeller, simplement en regardant la liste des arguments et le type des arguments :
int id(int x) { return x; }
int id(float x) { return x; }
int id(double x) { return x; }
int id(long x) { return x; }
Dans le cas présent, en fonction de l'argument, si ''x'' est ''int'', alors le compilateur appellera la fonction ''id(int)'', si ''x'' est ''float'', il appellera la fonction ''id(float)'', ainsi de suite.
Cependant, on peut avoir des soucis. Par exemple, si nous appellons ''id('a')'', le caractère 'a' peut-être converti en ''int'' ou en ''long''. Dans ce cas, le compilateur va indiquer que plusieurs fonctions ayant le nom ''id'' peuvent être appelées. Il faut donner une information sur la bonne fonction en spécifiant le type des paramètres. Pour l'exemple, précédent, il suffit d'écrire : ''id((int)'a')''. Dans ce cas, ce sera la fonction ''id(int)'' qui sera appellée.