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 :

Opérateur d'affichage C++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de chercheur111
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 352
    Par défaut Opérateur d'affichage C++
    Bonjour,

    Voici ma portion de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public: void afficher(){
     
        cout<<"de nom "<<nom<<" datant de "<<annee<<" (provenance "<<pays<<") ayant pour valeur faciale "<<valeur_faciale<<" francs";
     
      }
     ostream& etiquette(ostream& sortie) const {
    	        sortie<<"Timbre "<<afficher();
    	        return sortie;
    }
     friend std::ostream& operator <<(std::ostream&, const Timbre&);  
    };
    std::ostream& operator <<(std::ostream& Stream, const Timbre& Obj){
        Obj.etiquette(Stream);
        return Stream; 
    }
    Ce code ne se compile pas bien sur!
    J'aimerais bien savoir comment changer la méthode "afficher()", pour qu'elle fonctionne bien ici sortie<<"Timbre "<<afficher();


    Merci d'avance pour votre aide.

  2. #2
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par défaut
    Bonjour,

    Premièrement tu fournis à ton opérateur un paramètre qui est une méthode qui ne renvoie rien. Ton opérateur ne peut rien faire avec rien.

    Ensuite si tu veux pouvoir utiliser une autre méthode dans une méthode const, il faut que cette méthode aussi garantisse à l'autre qu'elle ne modifiera pas l'objet.

    Un petit bout de code pour illustrer. Je te laisse adapter à ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    #include <iostream>
    #include <string>
     
    using namespace std;
     
    class Test
    {
        public:
     
        string afficher() const
        {
            return "bar";
        }
     
        ostream& etiquette(ostream& sortie) const
        {
            sortie << "foo" << afficher();
            return sortie;
        }
    };
     
     
    int main()
    {
        Test t;
        t.etiquette(cout);
        return 0;
    }

  3. #3
    Membre éclairé Avatar de chercheur111
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 352
    Par défaut
    D'accord. Merci bien
    Je l'ai changé comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public: string afficher() const{
     
        return ("de nom "+nom+" datant de "+annee+" (provenance "+pays+") ayant pour valeur faciale "+valeur_faciale+" francs");
      }
    J'ai eu cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    timbres.cc:38:41: erreur: no match for 'operator+' in 'std::operator+(std::basic_string<_CharT, _Traits, _Alloc>&&, const _CharT*) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>](((const char*)" datant de ")) + ((const Timbre*)this)->Timbre::annee'
    Avez-vous une idée comme concaténer un string et un int ?

    Merci d'avance.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre éclairé Avatar de chercheur111
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 352
    Par défaut
    Oui j'ai vu cette méthode .. Je dois utiliser:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include <sstream>
    Alors que je dois utiliser que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #include <iostream>
    #include <string>
    using namespace std;
    Je ne sais pas s'il y a d'autres solutions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public: string afficher() const{
     
        return ("de nom "+nom+" datant de "+annee+" (provenance "+pays+") ayant pour valeur faciale "+valeur_faciale+" francs");
      }
    Je me suis dit que j'aurais peut être utilisé d'autre type de retour..

  6. #6
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    872
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 872
    Par défaut
    Tu peux faire ceci avec les strings :

    char* + string + char*
    string + char*
    char* + string

    Du moment que 2 char* ne se suivent pas, tu peux faire ce que tu veux, par-contre, il me semble que tu es oblige d'avoir une string en premier si tu veux concatener.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public: string afficher() const{
     
        return ("de nom "+nom+" datant de "+annee+" (provenance "+pays+") ayant pour valeur faciale "+valeur_faciale+" francs");
      }
    Donc ici, avant "de nom", tu dois avoir une string. De plus, est-ce que tu n'as que des char* et des string ? Si tu as des int ou autre ca ne fonctionnera pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public: string afficher() const{
        string tmp = "de nom ";
        return (tmp+nom+" datant de "+annee+" (provenance "+pays+") ayant pour valeur faciale "+valeur_faciale+" francs");
      }
    Pour les conversions int <-> string (ou autres), utiliser sstream est bien mais si tu n'y as pas le droit, tu peux toujours utiliser itoa et atoi.

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

Discussions similaires

  1. Question Sur l'Opérateur d'affichage C++ <<
    Par chercheur111 dans le forum C++
    Réponses: 24
    Dernier message: 19/04/2014, 21h28
  2. Opérateur d'affichage C++ <<
    Par chercheur111 dans le forum C++
    Réponses: 4
    Dernier message: 16/04/2014, 16h45
  3. Réponses: 3
    Dernier message: 11/08/2010, 09h02
  4. Réponses: 2
    Dernier message: 17/10/2009, 20h49
  5. Affichage en passant par un buffer...
    Par Sirotilc dans le forum MFC
    Réponses: 5
    Dernier message: 27/05/2002, 21h00

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