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 :

[Debutant]Les surcharges ne m'aiment pas ( << et >&


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 24
    Points : 16
    Points
    16
    Par défaut [Debutant]Les surcharges ne m'aiment pas ( << et >&
    Bonjour tout le monde.

    J'ai denouveau un prob de surcharge, mais cette fois-ci avec les opérateurs << et >>.

    En résumé, je dois encoder un mail et savoir le relir. A la place de faire des tas de cin et des tas de cout dans mes fonctions d'encodage et d'affichage, je dois faire appels aux surcharges de << et >>.

    Alors, on commence dans mon header :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	friend ostream& operator<< (ostream& msgs, const message& m);
    	friend istream& operator>> (istream& msgs, message& m);
    bien placé au-dessus de tout de ma classe message :
    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
    30
    31
    32
    class message
    {
    	friend ostream& operator<< (ostream& msgs, const message& m);
    	friend istream& operator>> (istream& msgs, message& m);
    	private:
    		static int cpt_id_message; // compteur nombr id déjà utilisé
    		int num_id_message;	// num id du message
    		std::string adresse_expediteur;
    		std::string adresse_destinataire;
    		bool urgent;
    		bool mess_lu;
    		std::string sujet;
    		std::string texte;
    	public:
    		message (void);					// constructeur par défaut
    		message (std::string& ad_dest) {setDestinataire(ad_dest);}
    		message (const message & mess);	// constructeur de copie
    		message (int num, std::string& ad_exp, std::string& ad_dest, bool urg, bool msg_lu, std::string& sjt, std::string& txt);
     
    		message operator+ (const std::string& ad_dest) const;   // surcharge de l'opérateur +
     
    		void affMessage (void);	// afficher le message
    		void encMessage (void);	// entrer le message
    		void checkFormatMsg (std::string& tmpEnc);	// vérifie la présence d'un " @ " 
     
    		void setExpediteur (const std::string& tmpEnc) {
    			adresse_expediteur = tmpEnc; }
    		void setDestinataire (const std::string& tmpEnc) {
    			adresse_destinataire = tmpEnc; }
    		const std::string& getDestinataire (void) {
    			return adresse_destinataire; }
    };
    Ma fonction d'affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ostream& operator <<(ostream& msgs, const message& m)
    {
    	msgs << "ID message : " << m.num_id_message << endl 
    		<< "Expediteur : " << m.adresse_expediteur << endl
    		<< "Destinataire(s) : " << m.adresse_destinataire << endl
    		<< "Urgent : " << m.urgent << endl
    		<< "Lu : " << m.mess_lu << endl
    		<< "Sujet : " << m.sujet << endl
    		<< "Texte : " << m.texte << endl;
    	return msgs;
    }
    qui est appellée par çà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	message affMessage;
    	cout << affMessage << endl;
    Ma fonction d'encodage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    istream& operator >> (istream& msgs, message& m)
    {
    ...// Où j'ai pris soin de faire précéder tous les encodages d'un "m."
    return msgs;
    };
    qui est appellé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	message affMessage;
    	cin >> affMessage;
    Voilà... j'arrive à encoder... lorsque je fais des cout de chaque variables, y a qlq chose dedans, cependant, lorsque je fais un cout << msgs;, bah çà affiche rien hormis le contenu du constructeur par défaut.

    Et encore une fois, durdur de trouver de la doc bien faite sur la surcharge de << et >>. Quelqu'un veut bien faire un tuto complet sur çà Cà serait apprécié par beaucoup de monde

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 24
    Points : 16
    Points
    16
    Par défaut
    Yep, j'avais pas envisagé le prob, mais çà fonctionne dans un certain cas .

    En faite, lorsqu'on met dans la même fonction, le cin >> msgs et le cout << msgs, çà fonctionne. Mais lorsqu'on les mets dans des fonctions séparées, çà fonctionne plus... Logic, çà se détruit (du moins si ma logic est bonne).

    Y aurait-il moyen de faire une déclaration globale pour éviter que les destructeurs entrent en action ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 24
    Points : 16
    Points
    16
    Par défaut J'ai la soluce...
    Bon, j'ai résolu le problème en envoyant comme paramètre dans mes fonction d'affichage et d'encodage, l'adresse de la structure...

    Dans mon main();
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    msgs.encMessage(msgs);
    msgs.encMessage(msgs);
    msgs.affMessage(msgs);
    Le tour est joué.

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

Discussions similaires

  1. Debutant : les tests ne sont pas compilés
    Par jdvacheron dans le forum Maven
    Réponses: 1
    Dernier message: 03/07/2007, 17h19
  2. Réponses: 11
    Dernier message: 03/04/2007, 13h34
  3. les pointeurs sur pointeurs ne m'aiment pas :/
    Par GhostNemo dans le forum C
    Réponses: 3
    Dernier message: 17/12/2006, 23h10
  4. [DEBUTANT]Est-il possible de ne pas utilisé les logs
    Par tripper.dim dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/07/2006, 10h34
  5. Les delete n'aiment pas les alias?
    Par LineLe dans le forum Langage SQL
    Réponses: 7
    Dernier message: 08/04/2005, 09h59

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