salut
à quoi signifie les mots this et freind en C++
Version imprimable
salut
à quoi signifie les mots this et freind en C++
Salut
jette un peu un œil là dessus http://cpp.developpez.com/cours/polyCpp/
Tu y trouvera tes réponses.
Ainsi que dans la FAQ :
http://cpp.developpez.com/faq/cpp/
Salut,
Pour faire simple, this est un pointeur sur l'objet en cours d'utilisation, lorsque tu te trouve dans une fonction membre.
Le seul cas où il est réellement intéressant de l'utiliser, c'est lorsque tu dois passer un pointeur (ou une référence, mais il s'agira alors de le "déréférencer") à une fonction (non membre) qui en a besoin.
Ainsi, le code suivant serait tout à fait inutile:
Par contre, il sera indispensable de l'utiliser dans un code proche deCode:
1
2
3
4
5
6
7
8
9
10
11
12 class MaClass { public: /*...*/ void foo() { /* this est inutile ici car il est implicite */ this->membre = 3; } private: int membre; };
Le mot clé friend quant à lui déclare une amitié entre une classe et (selon le cas) une autre classe ou une fonction.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 /*une fonction qui utilise un pointeur sur un objet de type MaClass */ void foo(Maclass * c) { /*...*/ } /* ou une fonction qui utilise une référence (éventuellement constante) * sur un objet de type MaClass */ void bar (MaClass /*const*/ & c) { /*...*/ } class MaClass { public: /*...*/ void doSomething() { foo(this); bar(*this); } };
Cela revient à dire au compilateur:
Utilisée intelligemment, l'amitié est de nature à renforcer l'encapsulation en évitant de créer des accesseurs ou des mutateurs qui n'auraient normalement pas lieu d'être.Citation:
Je fais suffisamment confiance à la classe ou à la fonction pour lui donner l'accès à ce que je cache normalement aux autres classes et fonctions externes (en gros, à tout ce qui est déclaré private ou protected)
Par contre, si tu l'utilise mal (entre autre, en déclarant trop d'amitiés), tu finira par obtenir l'inverse, trop de classes et de fonctions ayant accès à des choses auxquelles elles n'auraient jamais du réellement avoir accès ;)
Reporte toi à la FAQ (dont les liens ont été donnés plus haut) pour en apprendre d'avantage ;)