Partage
  • Partager sur Facebook
  • Partager sur Twitter

surcharge des fonctions

    3 mars 2008 à 20:56:29

    salut tout les zéros j'ai une question en ce qui concerne la surcharge des fonctions :
    question :
    quelle fonction va choisir le compilateur parmi ces deux fonctions
    cout<< somme(2,2);
    dont le prototypes des fonctions est: charsomme(int a ,int b) et intsomme(int a ,int b)
    • Partager sur Facebook
    • Partager sur Twitter
      3 mars 2008 à 21:03:27

      ambiguïté ---> même signature
      • Partager sur Facebook
      • Partager sur Twitter
        3 mars 2008 à 21:04:49

        Et bien en vrai, le compilateur ne peut pas faire de surcharge sur le type de retour comme tu le fais :) . Cela provoque d'ailleurs une erreur :
        foo_.cpp: In function 'char somme(int, int)':
        foo_.cpp:5: error: new declaration 'char somme(int, int)'
        foo_.cpp:4: error: ambiguates old declaration 'int somme(int, int)'


        En gros, la déclaration de la surcharge est ambigüe, et le compilateur ne peut donc rien faire :) . Cela vient de comment est réalisé la décoration des noms en C++, mais ça commence à sortir de mes connaissances plutôt réduites :p .

        EDIT: Zut, grillé :D .
        • Partager sur Facebook
        • Partager sur Twitter
          3 mars 2008 à 21:11:23

          alors notre amie mateo21 a dit dans le tutoriel que "Le type de retour n'est donc pas pris en compte pour identifier la fonction" donc c quoi la solution dans le cas ci -dessus et merci
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            3 mars 2008 à 21:12:37

            Le seul cas où le retour d'une fonction rentre dans sa signature, c'est avec les valeurs de retours covarientes.
            • Partager sur Facebook
            • Partager sur Twitter
              3 mars 2008 à 21:59:13

              eh bien, il me semble que tu pourrais garder la seule déclaration "int somme(int a, int b)"

              Quand tu auras vraiment besoin d'un char en sortie et que tu peux prouver mathématiquement que le résultat de somme(x, y) se trouvera entre -128 et +127 tu pourra convertir explicitement le résultat en char comme suit :

              cout << (char) somme(x, y);

              Ca fait tes deux fonctions en une :)
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                3 mars 2008 à 22:36:23

                ou en utilisant static_cast qui est du C++ (cf mots-clefs). ;)
                • Partager sur Facebook
                • Partager sur Twitter
                  4 mars 2008 à 11:36:17

                  Ici la surcharge n'a pas d'interret parce que tu veux explicitement faire la différence entre une fonction qui renvoie un char et celle qui renvoie un int.

                  Si jamais tu veux quand même te casser la tête avec la surcharge tu peux faire:
                  1. void somme(char & result, int a, int b); //F1
                  2. void somme(int  & result, int a, int b); //F2


                  1. char c; int a,b,i;
                  2. somme(c,a,b); va appeler F1
                  3. somme(i,a,b); va appeler F2

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    4 mars 2008 à 13:08:41

                    Encore faut-il que la fonction (F2) gère les cas de "out_of_range" (donc si la valeur de retour n'est pas contenue dans l'intervalle [-127;127]).
                    • Partager sur Facebook
                    • Partager sur Twitter
                      4 mars 2008 à 19:00:43

                      merci beaucoup pour vos réponses ça fait chaud au coeur ^^
                      • Partager sur Facebook
                      • Partager sur Twitter

                      surcharge des fonctions

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown