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 de l'opérateur <<


Sujet :

C++

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Points : 135
    Points
    135
    Par défaut Problème de surcharge de l'opérateur <<
    Salut !

    J'ai du mal pour l'opérateur << sur le code suivant :
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    #include <iostream>
     
    using namespace std;
     
    class POINT3D
    {
    private:
    	float m_X, m_Y, m_Z;
     
    public:
    	POINT3D(float x = 0, float y = 0, float z = 0);
    	POINT3D operator+(const POINT3D &p);
    	void operator<<(const POINT3D &p);
     
    	void SetPosition(float x = 0, float y = 0, float z = 0);
    };
     
    POINT3D::POINT3D(float x, float y, float z)
    {
    	m_X = x;
    	m_Y = y;
    	m_Z = z;
    }
     
    POINT3D POINT3D::operator+(const POINT3D &p)
    {
    	POINT3D temp;
     
    	temp.m_X = p.m_X;
    	temp.m_Y = p.m_Y;
    	temp.m_Z = p.m_Z;
     
    	return temp;
    }
     
    void POINT3D::operator<<(const POINT3D &p)
    {
    	cout << p.m_X << " " << p.m_Y << " " << p.m_Z << endl;
    }
     
    void POINT3D::SetPosition(float x, float y, float z)
    {
    	m_X = x;
    	m_Y = y;
    	m_Z = z;
    }
     
    int main()
    {
    	POINT3D p, y(1,2,3);
     
    	cout << p;
    	cout << y;
     
    	return 0;
    }

    Je vois pas trop ce qui va pas, si vous pouviez m'aider, ça serait sympa.

    Merci.

    Kr00pS

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920

  3. #3
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Points : 135
    Points
    135
    Par défaut
    Merci, j'avais déjà essayé un truc du genre sauf que je savais pas qu'il fallait mettre la fonction en friend.

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Les opérateurs << et >>, quand il s'agit de les redéfinir pour les flux, doivent:
    • recevoir un flux en parametre
    • *idéalement* renvoyer le flux pour permettre la mise en série


    Ainsi, ta classe POINT3D prendrait l'apparence suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class POINT3D
    {
        public:
            POINT3D(float x = 0, float y = 0, float z = 0);
            ~POINT3D();
            std::ostream& operator<<(std::ostream&,const  POINT3D &);
        private:
            float m_X, m_Y, m_Z;
    };
    et serait implémentée sous une forme ressemblant à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    std::ostream& POINT3D::operator<< (std::ostream& stream, const POINT3D& pt)
    {
        //affichage des valeurs
        stream<<pt.m_X<<" "<<pt.m_Y<<" "<<pt.m_Z;
        //renvoie le stream pour l'affichage en série
        return stream;
    }
    et tu pourras alors envisager d'utiliser ton point sur les différents flux sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int main()
    {
        POINT3D pt(1.0,2.5,3.4);
        //affichage sur la  sortie standard
        std::cout<<pt<<std::endl;
        //mais on peut aussi envisager de l'enregistrer dans un fichier
        std::ofstream ofs("essai.txt");
        ofs<<pt;
    }

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    C'était pas assez bien expliqué dans la FAQ ? ...

    A part ça, tu as oublié un petit "friend" devant la déclaration de l'opérateur << dans la classe.

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

Discussions similaires

  1. Problème avec surcharge de l'opérateur []
    Par Raiden1234 dans le forum C++
    Réponses: 3
    Dernier message: 03/03/2008, 09h30
  2. Réponses: 2
    Dernier message: 03/10/2007, 14h59
  3. Réponses: 6
    Dernier message: 12/07/2006, 15h34
  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