Todos sabemos que solo se puede acceder a los miembros privados de una clase mediante funciones miembro de la clase y no se puede acceder a ellos fuera de la clase. Esto refleja las ideas de encapsulación y ocultación del diseño de clases en C++, que es la ventaja más básica de C++.
Pero si ocasionalmente realmente queremos acceder a estos miembros privados fuera de la clase, será mucho más problemático y estaremos en el dilema de no poder acceder a ellos ni declararlos como tipos públicos.
La aparición de amigos puede resolver muy bien este problema, es decir, al declarar la función externa como un tipo de amigo y darle el derecho de acceder a miembros privados dentro de la clase, se puede lograr lo mejor de ambos mundos. Este es el significado de amistad. También se puede ver en el significado literal. Como "amigos", abre un canal verde.
Un objeto amigo puede ser una función general global o una función miembro de otra clase. Esto se denomina función amiga . No solo eso, un amigo también puede ser una clase, lo que se llama clase de amigo .
Después de comprender el significado y la función de los amigos, veamos cómo usarlos en C++. Para funciones amigas, solo necesita declarar la función dentro de la clase y agregar la palabra clave amiga antes. Esta función tiene permisos únicos y se convierte en una función amiga.
Lo último que hay que tener en cuenta es que los amigos no pertenecen a la clase en sí, ya sean funciones amigas o clases amigas. Ninguno de los dos puede usar el puntero this dentro de la clase, ni puede heredarse, al igual que los amigos del padre no son necesariamente amigos del hijo.
A continuación, escribimos un programa para encontrar la distancia entre dos puntos:
#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);};//Encontrar la distancia entre dos puntos doubleDistance(Point&a,Point&b){doublexx;doubley;xx=ax-bx;yy = ay-by;returnsqrt(xx*xx+yy*yy);}intmain(){PuntoA(2.0,3.0);PuntoB(1.0,2.0);doubledis;dis=Distancia(A,B);cout<<dis < <endl;return0;}
Puede observar que la función que implementa la distancia entre dos puntos es una función general externa. Dado que necesitamos acceder a miembros privados en la clase, la declaramos como un tipo amigo frito en la clase, consulte la última línea en la clase Punto. . En este momento, el código se compila sin problemas y el resultado normal es:
Puede ver los resultados de la prueba. Puede experimentar usted mismo en la computadora. Intente no declararlo como tipo amigo y observe los resultados del error.