Surdefinition de fonction

Résolu
samaie Messages postés 12 Date d'inscription mercredi 9 janvier 2008 Statut Membre Dernière intervention 31 janvier 2008 - 16 janv. 2008 à 18:28
cs_nosferaptus Messages postés 5 Date d'inscription mardi 6 mars 2007 Statut Membre Dernière intervention 4 avril 2010 - 6 nov. 2008 à 17:33
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

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
16 janv. 2008 à 19:37
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++ (@++)<!--
3
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
16 janv. 2008 à 18:50
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.
0
samaie Messages postés 12 Date d'inscription mercredi 9 janvier 2008 Statut Membre Dernière intervention 31 janvier 2008
16 janv. 2008 à 18:56
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;

}
0
cs_nosferaptus Messages postés 5 Date d'inscription mardi 6 mars 2007 Statut Membre Dernière intervention 4 avril 2010
6 nov. 2008 à 17:33
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)
0
Rejoignez-nous