Bonjour,
Je me suis lancé à regarder des cours (livres, tut, faq, vidéos) en C++ , puis j'essaye de pratiquer par moi même via du code que je teste, il y a une notion que je ne comprends pas bien. J'essaye de surcharger l'operator<< pour afficher un objet de type point avec ses coordonnées x,y ! J'ai simplifié le code en retirant la classe fille, je ne m'en sers pas pour cet exemple, d'où le fait que les variables soient en "protected"...pour quand je la réutiliserai... Voilà le code du fichier d'en tête HPP, pas de problème dessus à priori...
Voilà ce que je souhaite surcharger dans le 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
17
18
19
20
21
22 namespace pt { class point { public: point(int x = 0, int y = 0); ~point() {} point(point& p); void disp(); point operator+(const point& a); point operator=(const point& a); friend std::ostream& operator<<(std::ostream &flux, const point& p); protected: int m_x; int m_y; }; }
il me dit que pt::point::m_x et pt::point::m_y sont inaccessibles...par contre, ça marche très bien quand je fais ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 std::ostream& operator<<(std::ostream &flux, const pt::point& p) { flux << "x : " << p.m_x << " - y : " << p.m_y; return flux; }
Mon hypothèse est que j'ai déclaré cette fonction en tant qu'amie dans la classe point pour accéder à ses membres m_x et m_y sous le namespace pt et qu'il faut donc que cette fonction soit aussi dans le namespace pt....mais j'aurais aimé voir si je pouvais mettre des opérateurs de résolution de portée, mais il n'en veut pas...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 namespace pt { std::ostream& operator<<(std::ostream &flux, const pt::point& p) { flux << "x : " << p.m_x << " - y : " << p.m_y; return flux; } }
j'ai essayé de mettre des pt:: un peu partout devant ou après les std ou à la place, mais il n'en veut pas, pourtant l'opérateur de portée pt:: devrait me permettre d'éviter de mettre la fonction dans namespace pt {} !???
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 std::ostream& pt::operator<<(std::ostream &flux, const pt::point& p) { flux << "x : " << p.m_x << " - y : " << p.m_y; return flux; }
Fonction amie + namespace + classe + surcharge operateur<< y a plusieurs principes que je ne maîtrise pas quand tout est combiné ensemble...!
Merci.
Partager