IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Problème de surcharge d'opérateur std::cout


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 52
    Par défaut Problème de surcharge d'opérateur std::cout
    Bonjour. Je souhaiterais afficher sur l'ecran les informations d'un objet de type Vin * v1= new Vin(string nom, string annee, string quantité).

    J'ai donc fais la surcharge de l'operateur d'injection <<, mais ça ne m'affiche que des truc bizarres en hexa, du genre 0x198f3s54.

    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    std::ostream & operator << (std::ostream & os, Vin unVin)
    {
                 os << unVin.getsonNom() <<" "<< unVin.getsonAnnee() << " " << unVin->getsaQuantite() << '\n';
     
                 return os;
     
    }
    Et voici un des accesseurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::string Vin::getsonNom() const
    {
        return sonNom;
    }
    Une idée?
    Merci.

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 155
    Par défaut
    hello,

    t'as tenté de placer ton objet en référence?

    std::ostream & operator << (std::ostream & os, Vin &unVin)

    dans mon bouquin c'est défini comme ça...ca vient peut être de la!

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Idéalement, il faut même que ce soit une référence constante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::ostream& operator << (std::ostream& os, const Vin& unVin)
    Si tu as mal défini ton constructeur de copie il se pourrait que ça vienne de la.

    Au passage, si tous tes accesseurs sont définis tels que celui que tu nous as collé ce n'est pas très rapide. Il vaudrait mieux renvoyer des références constantes vers tes strings.

  4. #4
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 52
    Par défaut
    hello,

    t'as tenté de placer ton objet en référence?

    std::ostream & operator << (std::ostream & os, Vin &unVin)

    dans mon bouquin c'est défini comme ça...ca vient peut être de la!
    Oui. même résultat.

    Idéalement, il faut même que ce soit une référence constante :
    Code :

    std::ostream& operator << (std::ostream& os, const Vin& unVin)

    Si tu as mal défini ton constructeur de copie il se pourrait que ça vienne de la.

    Au passage, si tous tes accesseurs sont définis tels que celui que tu nous as collé ce n'est pas très rapide. Il vaudrait mieux renvoyer des références constantes vers tes strings.
    Je vais tester avec un const alors...

    Je ne vois pas ce que tu veux dire pour les accesseurs. Oo

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Les "accesseurs", ce sont ces méthode qui renvoient une valeur propre à l'objet en cours de traitement, telle que
    getSonNom, getSonAnee, getSaQuantité...

    As tu remarqué que tu passe ton élément vin par valeur et que tu essaye d'obtenir le résultat de getSaQuantité comme s'il s'agissait d'un pointeur (il faut utiliser le . pour appeler getSaQuantité, et non le déréférencement de pointeur -> )

    Enfin, l'idéal serait peut etre de déclarer la fonction amie dans la classe vin, histoire de pouvoir te passer du recours aux accesseurs...

    Dans la classe Vin, un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    friend std::ostream& operator<<(std::ostream&, const Vin&);
    en accessibilité publique te permet d'écrire plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::ostream& operator<<(std::ostream o, const Vin& v)
    {
        o<<v.mNom<<" "<<v.mprenom<<" "<<v.mquantite;
        return o;
    }
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Citation Envoyé par Nyko17 Voir le message
    Je vais tester avec un const alors...
    Si ça ne marche pas avec une référence simple ce ne sera pas mieux avec une référence constante, le problème doit venir de l'objet que tu passes.
    Tu as essayé d'afficher le résultat de tes getxxx() simplement dans ton main ?

  7. #7
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Déférence tu bien ton objet ?
    Car vu ce tu nous décrit, il me semble que tu affiche plus le contenu du pointeur que l'objet pointé.
    Pour en être sûr, montre nous comment tu appelle operator<< pour ton objet.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de surcharge d'opérateur flux avec pointeur
    Par eleve_prog dans le forum Débuter
    Réponses: 4
    Dernier message: 18/04/2011, 18h41
  2. problème au surcharge d'opérateur =
    Par zougagh dans le forum C++
    Réponses: 12
    Dernier message: 28/06/2010, 17h29
  3. Réponses: 7
    Dernier message: 02/12/2007, 21h43
  4. Petit probléme de surcharge d'opérateur .
    Par Clad3 dans le forum C++
    Réponses: 20
    Dernier message: 11/04/2005, 20h15
  5. Problème de surcharge d'opérateurs
    Par Hell dans le forum C++
    Réponses: 17
    Dernier message: 17/01/2005, 16h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo