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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    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
    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 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;
    }
    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

  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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    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