Nous savons tous que les membres privés d’une classe ne sont accessibles que par les fonctions membres de la classe et ne sont pas accessibles en dehors de la classe. Cela reflète les idées d’encapsulation et de dissimulation de la conception de classes en C++, qui constituent l’avantage le plus fondamental du C++.
Mais si de temps en temps nous voulons vraiment accéder à ces membres privés en dehors de la classe, cela deviendra beaucoup plus gênant, et nous serons confrontés au dilemme de ne pas pouvoir y accéder ni les déclarer comme types publics.
L'émergence d'amis peut très bien résoudre ce problème, c'est-à-dire qu'en déclarant la fonction externe comme type ami et en lui donnant le droit d'accéder aux membres privés au sein de la classe, on peut obtenir le meilleur des deux mondes. C'est le sens de l'amitié. Cela se voit aussi au sens littéral. Comme « amis », il ouvre un canal vert.
Un objet ami peut être une fonction générale globale ou une fonction membre d'une autre classe. C'est ce qu'on appelle une fonction amie . De plus, un ami peut également être une classe, appelée classe d'amis .
Après avoir compris la signification et la fonction des amis, voyons comment les utiliser en C++. Pour les fonctions ami, il vous suffit de déclarer la fonction dans la classe et d'ajouter le mot-clé ami avant elle. Cette fonction dispose d'autorisations uniques et devient une fonction amie.
La dernière chose à noter est que les amis n'appartiennent pas à la classe elle-même, qu'il s'agisse de fonctions d'amis ou de classes d'amis. Ni l'un ni l'autre ne peuvent utiliser ce pointeur au sein de la classe, ni être hérité, tout comme les amis du père ne sont pas nécessairement les amis du fils.
Ensuite, nous écrivons un programme pour trouver la distance entre deux points :
#include<iostream>#include<math.h>usingnamespacestd;classPoint{private:doublex;doubley;public:Point(doublea,doubleb){x=a;y=b;}intGetPoint(){cout<<(<< x<<,<<y<<);return0;}frienddoubleDistance(Point&a,Point&b);};//Trouver la distance entre deux points doubleDistance(Point&a,Point&b){doublexx;doubleyy;xx=ax-bx;yy = ay-by;returnsqrt(xx*xx+yy*yy);}intmain(){PointA(2.0,3.0);PointB(1.0,2.0);doubledis;dis=Distance(A,B);cout<<dis < <endl;retour0;}
Vous pouvez observer que la fonction qui implémente la distance entre deux points est une fonction générale externe puisque nous devons accéder aux membres privés de la classe, nous la déclarons comme un type ami frit dans la classe, voir la dernière ligne de la classe Point. . À ce stade, le code se compile sans problème et le résultat normal est :
Vous pouvez voir les résultats du test. Vous pouvez expérimenter par vous-même sur l'ordinateur. Essayez de ne pas le déclarer comme type d'ami et observez les résultats d'erreur.