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 ?
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 ?
si tu veux redéfinir << et >> pour pouvoir les utiliser avec cin et cout, il te suffit d'utiliser ces fonctions :
où T est le type pour lequel tu veux surcharger l'opérateur ^^
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&);
n'oublie pas de renvoyer le premier argument (ostream ou istream) à la fin...
comme ça tu pourra fairesinon tu ne peux pas faire ce qui est après monT
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2cout <<"la valeur de monT : " <<monT <<endl; cin >>a >>monT >>b;
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)
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 << ')'; }
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)
friend ostream& operator<<(ostream&, const Point &); est généralement mieux
Boost ftw
Ou encore mieux, mettre un accesseur constant, et là pas besoin de friend.
oui mais dans ce cas, risque de violer l'encapsulationEnvoyé par Miles
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)
au contraire. c'est le friend qui viole (consciemment) l'encapsulationEnvoyé par Swoög
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.
Tout à fait, c'est pour ça que j'ai expressément indiqué constant
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)
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, ...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager