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] Définir un operateur<<


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 52
    Par défaut [debutant] Définir un operateur<<
    Bonjour,

    Je souhaiterai définir un opérateur<< pour pourvoir afficher celle-ci plus facilement dans ma classe suivante :

    fichier : Premier.hpp
    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
     
    #include <string>
    #include <cstring>
    #include <iostream>
    #include <new>
    using namespace std;
     
    class Premiere
    {
    private:
    	char * nom;
    	int nom_size;
            int age;
    	enum { AGE_DEFAULT=18};
     
    public :
    		Premiere(); //Constructeur par defaut
    		Premiere(char *,int); //Constructeur n°2
    		Premiere(const Premiere&); // Constructeur de recopie
    		virtual ~Premiere(); //Destructeur
    		Premiere& operator=(const Premiere&); //Opérateur d'affectation
    		int getAge();
    		char * getNom();
    };
    inline std::ostream& operator<<(std::ostream&,const Premiere&);
    J'ai implémenté les méthodes dans un fichier Premier.cpp :
    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
     
    [...]
    int Premiere::getAge()
    {
    	return this->age;
    }
    char * Premiere::getNom()
    {
    	return this->nom;
    }
    //ensuite l'opérateur <<
    inline std::ostream& operator<<(std::ostream& os, const Premiere& p)
    {
    	os << p.getAge();
    	return os;
    }
    Mais le compilateur me dis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Premier.cpp:57: error: no matching function for call to `Premiere::getAge() const'
    Je ne comprends pas pkoi il me dis ça !

    En effet quand je change

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int Premiere::getAge(); en int Premiere::getAge() const;
    Tout se passe bien !

    Pourquoi dois-je mettre const à la fin de la fonction et quelle est sa signification ?

    Merci d'avance pour vos réponses.

  2. #2
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut
    const à la fin de la signature de la fonction membre signifie que la fonction n'est pas autorisée à modifier l'état des attributs de l'objet.

    comme tu passes un objet const à l'opérateur <<, il refuse l'utilisation de fonctions membres non const de ton objet.

    alternative, mettre << en friend et accéder directement aux attributs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ... operator<< ...
    {
      cout << obj.attr;
    }

Discussions similaires

  1. [Debutant] Définir un type contraint
    Par gui38 dans le forum Langage
    Réponses: 14
    Dernier message: 16/11/2006, 15h37
  2. [débutant] surcharge d'opérateur
    Par mouss31 dans le forum Visual C++
    Réponses: 4
    Dernier message: 03/11/2006, 10h00
  3. [debutant]probleme avec l'operateur +
    Par Battosaiii dans le forum Débuter
    Réponses: 9
    Dernier message: 17/11/2005, 01h29
  4. [debutant] Utilisation de l'operateur = dans une classe
    Par Battosaiii dans le forum Débuter
    Réponses: 8
    Dernier message: 10/11/2005, 23h01
  5. [Debutant(e)]définir les valeurs possibles d'un param
    Par mouste79 dans le forum Langage
    Réponses: 7
    Dernier message: 18/11/2004, 10h48

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