Surdefinition de fonction [Résolu]

Signaler
Messages postés
12
Date d'inscription
mercredi 9 janvier 2008
Statut
Membre
Dernière intervention
31 janvier 2008
-
Messages postés
5
Date d'inscription
mardi 6 mars 2007
Statut
Membre
Dernière intervention
4 avril 2010
-
float test(int i, int j)


{


return (float) i+j;


}


float test(float i, float j)


{


return i*j;


}

Je vous poste deux fonctions:
Dans le cas ou je ferai un appel telle que test(2.5,3) j'aimerai savoir laquelle des deux fonctions sera applée et aussi en savoir la raison??
Merci.

4 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Ben....
Logiquement parce que la première fonction ne prend que des int mais tu passes un float. Le compilo fera donc appel à la seconde fonction qui prend des floats.

C++ (@++)<!--
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Soit plus rigoureux, tapes test(2.5f, 3.0f) et  tu n'auras pas de doute.

Sinon pour ton pb, pourquoi ne le testes tu pas au lieu de poster sur un forum ?
Pour la réponse, j'imagine que le compilo va préférer promouvoir le type int en float plutot que de dégrader le floatant 2.5, donc la deuxième fonction sera probablement appelée.
Messages postés
12
Date d'inscription
mercredi 9 janvier 2008
Statut
Membre
Dernière intervention
31 janvier 2008

Non ma question est justement dans le cas ou dans l'appel de fonction j'ai un float 2.5 et un int 3 ce qui fait
test(2.5f,3(int)) et donc pour savoir en faite pourquoi c'est la 2eme fonction qui va etre applée
je rappelle le code
 float test(int i, int j)

{

return (float) i+j;

}

float test(float i, float j)

{

return i*j;

}
Messages postés
5
Date d'inscription
mardi 6 mars 2007
Statut
Membre
Dernière intervention
4 avril 2010

Le compilateur différencie les deux fonctions par le nombre de paramètre dans ton cas la surcharge est identique dans le nombre, dans ce cas il passe au type de paramètre int pour la 1ere et float pour l'autre c'est comme ça qu'il fait la différence.
Lors de l'exécution c la 2eme qui va être exécutée ==> test(2.5,3.0)