Partage
  • Partager sur Facebook
  • Partager sur Twitter

Surcharger l'opérateur >>

pour un objet de type ZString.

    11 août 2008 à 20:09:45

    Alors voilà. J'ai réecris une ZString (ça faisait longtemps que j'avais fait le tp, alors j'ai décidé de le refaire sans l'aide de M@téo).

    Pas trop de problème, tout va bien.

    Puis, j'ai l'idée de surcharger l'opérateur >> .
    Alors suite à ce sujet, j'ai tenté de mettre en oeuvre les différents codes postés, or il ne fonctionne pas...

    J'ai une fonction vider, et l'opérateur +=(char) est surchargé.

    Mais je ne vois vraiment pas comment récupérer la chaine entrée (jusqu'au \n, par exemple).

    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      11 août 2008 à 23:50:20

      je n'en ai pas parce que je ne comprends pas le principe. J'ai récupérer tes codes de l'autre sujets, les ai modifiés mais pas moyen de les faire fonctionner.

      Et avec tout ce que vous avez dit, je ne suis plus sûr de la façon adéquate de procéder :
      récupérer caractère par caractère ou alors récupérer la ligne d'un coup ou arrêter après le premier espace ou etc.

      Et je ne sais pas trop me débrouiller avec un objet de type istream...

      J'aimerais plus comprendre que réussir, je privilégie les explications à du code.

      Merci d'avance.
      • Partager sur Facebook
      • Partager sur Twitter
        12 août 2008 à 0:22:10

        Qu'es que tu ne comprends pas dans ce code (non-testé):
        std::istream &operator>>(std::istream &In, ZString &Me)
        {
            /* On vide la chaîne */
            Me.Clear();
            
            /* On ajoute les caractères */
            char C = 0;
            while((C = In.get()) != '\n' and In and C != ' ' and C != 0)
                Me += C;
        
            /* On retourne In en "mangeant" les espaces */
            return In >> std::ws;
        }
        


        ps: Bien sûr la version donnée par MatteX (que l'on peut retrouver expliquée dans "Le Langage C++") dans l'autre sujet est plus complète, mais peut-être un peut compliquée pour un exercice.
        • Partager sur Facebook
        • Partager sur Twitter
          12 août 2008 à 0:38:37

          Il y a le In.get(C) qui ne doit être que l'équivalence de fget(c), mais dont je ne suis pas certain.

          Ensuite, il y a le fait que ça ne fonctionne tout simplement pas :
          Abcde
          Abcde
          
          e
          
          Process returned 0 (0x0)   execution time : 4.078 s
          Press any key to continue.


          avec ce code :
          #include <iostream>
          #include "MString.h"
          using namespace std;
          
          int main(void)
          {
              MString chaine = "";
              cin >> chaine;
              cout << endl << chaine << endl;
          
          
              return 0;
          }
          

          (À noter que ma classe s'appelle bien MString, puisque j'avais déjà un projet ZString et que je ne voulais pas les mélanger).

          <Edit>Or j'ai vérifier : ma fonction vider et l'operateur +=(char) fonctionne :
          D'accord. je tiens l'erreur. J'avais testé mon operateur +=(char) mais seulement en l'utilisant une fois. Or, il s'avère qu'il ne garde pas les modification précédentes..
          Je corrige et je test après.
          <re Edit>... -_-. J'avais oublié d'incrémenté ma variable m_longueur...
          • Partager sur Facebook
          • Partager sur Twitter
            12 août 2008 à 0:43:26

            J'ai edité mon code (comme déjà dit, je ne peux pas tester les codes que je donne).
            • Partager sur Facebook
            • Partager sur Twitter
              12 août 2008 à 0:57:11

              Bon donc suite à la correction de mon operateur +=(char), j'arrive à ceci (avec le même code que plus haut) en compilant :

              Allo
              asd
              
              Allo
              
              Process returned 0 (0x0)   execution time : 3.265 s
              Press any key to continue.

              Je dois donc le rentrer deux fois pour que sa fonctionne, mais la deuxième fois est ignoré.

              Comment faire donc pour éviter cela?
              • Partager sur Facebook
              • Partager sur Twitter
                12 août 2008 à 1:25:22

                Tu as bien pris le code edité ?
                • Partager sur Facebook
                • Partager sur Twitter
                  12 août 2008 à 1:59:00

                  Citation : Chlab_lak

                  Tu as bien pris le code edité ?



                  Oui. je réessaye pour voir mais je suis certain à 99% que j'ai repris le code édité.

                  (...)

                  En effet. Je dois encore et toujours écrire un deuxième mot pour qu'il prennent en compte le premier.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    13 août 2008 à 3:43:33

                    J'ai réfléchi au problème mais n'est pas trouvé la raison pour laquelle je devais entrer une saisie de trop à chaque cin...

                    Je repose donc la question.

                    Merci d'avance!.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      13 août 2008 à 14:13:51

                      A la place de :
                      return In >> std::ws;
                      

                      met
                      return In;
                      

                      Chez moi c'est ça le bug.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        13 août 2008 à 16:31:10

                        En effet.

                        C'était bien le problème.

                        Merci.
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Surcharger l'opérateur >>

                        × 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