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 :

redefinition de << et >>


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 228
    Points : 93
    Points
    93
    Par défaut redefinition de << et >>
    bonjour,
    je ne sais pas du tout comment on redefinit les operateurs d'entree-sortie (<< et >>) car je n'ai pas la moindre idée de comment ils sont faits. Pourriez-vous m'éclairer sur le sujet ?

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    si tu veux redéfinir << et >> pour pouvoir les utiliser avec cin et cout, il te suffit d'utiliser ces fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::ostream& operator<<(std::ostream&, const T&);
    std::istream& operator>>(std::istream&, T&);
    où T est le type pour lequel tu veux surcharger l'opérateur ^^

    n'oublie pas de renvoyer le premier argument (ostream ou istream) à la fin...

    comme ça tu pourra faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cout <<"la valeur de monT : " <<monT <<endl;
    cin >>a >>monT >>b;
    sinon tu ne peux pas faire ce qui est après monT
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    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 : 44
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Point
    {
       ...
       friend ostream& operator<<(ostream&, const Point);
    };
     
    ostream& operator<<(ostream &o, const Point p)
    {
       return o << '(' << p.x << ',' << p.y << ')';
    }

  4. #4
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    n'utiliser le friend que si c'est vraiment nécessaire et il est peut-être parfois possible de s'en passer ^^
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    friend ostream& operator<<(ostream&, const Point &); est généralement mieux
    Boost ftw

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Ou encore mieux, mettre un accesseur constant, et là pas besoin de friend.

  7. #7
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Citation Envoyé par Miles
    Ou encore mieux, mettre un accesseur constant, et là pas besoin de friend.
    oui mais dans ce cas, risque de violer l'encapsulation
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  8. #8
    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 : 44
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Citation Envoyé par Swoög
    oui mais dans ce cas, risque de violer l'encapsulation
    au contraire. c'est le friend qui viole (consciemment) l'encapsulation
    l'accesseur constant permet d'avoir accès à une donnée (pas forcément celle stockée dans l'objet, ça peut être transformé/mis en forme par l'accesseur) sans pouvoir la modifier.

  9. #9
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Tout à fait, c'est pour ça que j'ai expressément indiqué constant

  10. #10
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    certe, mais l'accesseur est accessible pour tout le monde, si c'est une donnée qui ne doit être accessible que pour les iostream, le fait de la rendre acessible à tout le monde viole l'encapsulation... c'est comme faire des accesseurs à tout va... ça sert à rien de faire de l'OO, autant faire des structs et basta...


    Tandis qu'en friend, ça permet de conserver l'intégrité globale, de plus c'est normalement le concepteur de la classe qui choisit les fonctions amies et les définies, donc si c'est bien codé, l'encapsulation peut-être respecter au maximum...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  11. #11
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Ah non, c'est pas du tout la même chose. Faire des structs, déjà, c'est comme les classes, il y a juste des cas précis où le struct est une vraie structure C, comme les std::pair, mais dans le cas général, utiliser des accesseurs, c'est bien, ça permet de pouvoir vérifier l'accès à ses variables, ce qui est le plus important.
    Tant que ce n'est pas critique, comme là, les coordonnées, on peut mettre des accesseurs sans crainte au niveau sécurité. Les plus grands de la programmations incitent à faire comme cela, que ce soit les spécialistes du C++ ou d'autres langagaes OO, comme Fowler, ...

Discussions similaires

  1. probleme 'enum' type redefinition
    Par wolflinger dans le forum C++
    Réponses: 3
    Dernier message: 04/03/2006, 13h46
  2. [ASE] commande redefinition de la taille du log
    Par hbendali dans le forum Sybase
    Réponses: 1
    Dernier message: 05/01/2006, 08h50
  3. [Language] Redéfinition de la méthode equals
    Par nak dans le forum Langage
    Réponses: 2
    Dernier message: 08/12/2005, 08h56
  4. Surcharge (ou redéfinition) de fonction
    Par Chii-san dans le forum SL & STL
    Réponses: 2
    Dernier message: 14/11/2005, 09h49
  5. Probleme de redefinition de type
    Par Mehdi Feki dans le forum C++
    Réponses: 8
    Dernier message: 21/05/2005, 00h27

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