On appelle signature de fonction son identifiant suivi par la liste de types de ses paramètres.
On peut déclarer / définir plusieurs fonctions ayant le même identifiant dans un même bloc tant qu'elles ont des signatures différentes.
Lors d'un appel, la liste des types des arguments serviront à choisir la bonne définition parmi plusieurs candidats. Si impossibilité d'en trouver un meilleur que les autres alors "erreur".
void f(double a){
...
}
void f(int a){
...
}
int main(){
f(3.); //f1
f(3); //f2
f(3l); //error
}
La surcharge est aussi possible avec les méthodes notamment les constructeurs.