Partage
  • Partager sur Facebook
  • Partager sur Twitter

Opérateur de flux >>

Petit problème pour la récupération de donnée dans un objet.

Sujet résolu
    3 juin 2007 à 11:30:19

    Voilà bonjour à tous !
    J'ai un petit problème mais avant de vous l'expliquer je vais tout d'abord vous présentez mon code.
    Voici le fichier Horaire.h qui contient ma classe Horaire.
    #ifndef DEF_HORAIRE
    #define DEF_HORAIRE
     
     class Horaire
    {
            public:
                    /*Constructeur par défaut*/
                    Horaire();
                    /*Récupération d'un horaire*/
                    void recuperer(std::istream &in);
            private:
                    unsigned char m_heure;
                    unsigned char m_minute;
                   
    };

    #endif

    Voici Horaire.cpp.
    #include "Horaire.h"

    using namespace std;
     
     Horaire::Horaire()
    {
            m_heure = 0;
            m_minute = 0;
    }
    void Horaire::recuperer(istream &in)
    {
            /*Ne sait pas encore quoi mettre ici c'est justement là qu'est le problème*/
    }

    Voici Main.cpp.
    #include "Main.h"
    using namespace std;

     int main()
    {
           
            return 0;
    }


     istream &operator>>(istream &in,Horaire &horaire)
    {
            horaire.recuperer(in);
            return in;
    }

    Et voilà Main.h.
    #ifndef DEF_MAIN
    #define DEF_MAIN

    #include <iostream>
    #include "Horaire.h"

    std::istream &operator>>(std::istream &in,Horaire &horaire);

    #endif


    Donc voilà mon problème est le suivant : Récupérer un Horaire saisi par l'utilisateur sous la forme XXhYY, XX étant les heures et YY les minutes.
    Comme vous vous en doutez je souhaite pouvoir stocker XX dans l'attribut m_heure et YY dans l'attribut m_minute de ma classe Horaire.
    J'y ai donc réfléchi et je me suis dit qu'il fallait que je vérifie la saisie est que je stocke tous ce qu'il y a avant le h dans m_heure et tous ce qu'il y après dans m_minute. Seulement voilà comment dois-je m'y prendre ? Est ce que je dois récupérer la saisie dans un std::string ensuite lire la chaine et stocker ensuite XX dans m_heure et YY dans m_minute ? Est-ce seulement possible du fait que je passe d'une chaine de caractère à un entier positif ?
    Sinon comment dois-je m'y prendre ?
    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      3 juin 2007 à 12:59:29

      Utilise les stringstream et getline.
      • Partager sur Facebook
      • Partager sur Twitter
        3 juin 2007 à 13:27:29

        Pour le getline ok c'est exactement ce qu'il me faut mais est ce que le nombre stocker dans le std::string pourra être stocker dans le unsigned char ?
        Voilà un exemple pour comprendre :

        std::string str;
        getline(cin,str,'h');
        /*en imaginant ensuite que j'ai crée une méthode pour pouvoir modifier la valeur de mes attributs*/
        /*Est ce que cela sera possible?*/
        m_heure = str ; //sachant que m_heure est un unsigned char.

        • Partager sur Facebook
        • Partager sur Twitter
          3 juin 2007 à 14:00:41

          Olla monsieur
          Il y a bien plus simple
          tu peu tous simplement surcharger l'operateur >>

          Pour ça rien de plus simple( enfin presque )

          contrairement au autre operateur ++ , -- , == , = ...
          << et >> ne sont pas des operateur interne de ta class
          il doive juste etre des amis de ta classe (COPAIN !!)

          Donc comment faire cela

          Tu doit d'abort dire dans la declaration de ta classe que l'operateur >> est un ami

          tu le fait comme ça :

          friend istream & operator>>(istream &,TACLASS &);


          Quel est l'interer d'avoir une methode ami ?
          Cela permet quel est access a toutes la partie priver de ta class
          mais vu que c'est toi qui va implementer ton operateur , c'est pas trop grave :p

          Ensuite commen implementer la surcharger de l'operateur >>
          comme ceci :

          istream & operator >>(istream & e,TACLASS &p){
                  unsigned char heure,min;
                  e >> heure;
                  e >> min;
                  m_heure = heure ;
                  m_minute = min;
                  return e;
          }


          voila !

          comme ça quand tu voudra faire saisir l'heure tu aura cas faire
          cin >> TonObjet ;
          • Partager sur Facebook
          • Partager sur Twitter
            3 juin 2007 à 14:10:35

            Extrais une std::string, et appliques-lui strptime, c'est fait pour ! Enfin, pour avoir une maintenabilité maximale, et voire même pour pouvoir supporter plusieurs formats entrants.

            (des fois,il y a plein de choses à garder du C en C++)
            • Partager sur Facebook
            • Partager sur Twitter
            C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
              3 juin 2007 à 15:44:04

              Merci pour votre aide :) !
              • Partager sur Facebook
              • Partager sur Twitter

              Opérateur de flux >>

              × 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