C++ – Classes et fonctions amies
On utilise la notion d’ami lorsque l’on a deux classes dont l’une doit avoir accès aux données membres privées de l’autre.
Cette façon de faire permet de limiter à une seule classe l’accès à des données privées et de ne pas devoir rendre celles-ci publiques ce qui les rendrait disponibles pour tout objet ou classe.
class A { public: void f(); }; class B { private: friend class A; int g(){return x;} int x; };
Il est important de remarquer que c’est la classe qui veut partager ses données privées avec une autre qui donne l’accès à celles-ci en spécifiant que l’autre classe est une amie.
Cela se fait avec le mot-clé friend suivi de la classe qui reçoit l’accès aux données privées.
Les bonnes pratiques de la programmation veulent que même si dans ce cas-ci, A a accès à x dans B, A n’y fasse appel que via une fonction privée g(), qui sert d’interface, et non directement. Rien ne l’empêche néanmoins si ce n’est le code de bonne pratique.
En réalité, cette notion de classe amie est une généralisation des fonctions amies. On peut très bien avoir une fonction membre d’une classe ou une fonction globale à laquelle une classe accorderait l’accès à ses données privées. Le principe est le même que pour une classe.
class A { public: int f(); class B { private: friend int global_func(); friend void A::f(); int x; }; int A::f() { B b; return b.x; } int global_func() { B b; return b.x; }
Notez également que les déclarations d’amis peuvent être faites tant dans la partie privée que publique de la classe. Il n’y a aucune différence entre les deux.
Posted: août 12th, 2008 under C++.
Comments: none
Tweet