Amistad en POO

La amistad en POO es una característica permite que una función que no pertenezca a una clase pueda hacer uso de todos sus miembros.

Funciones Amigas

Para hacer que una función sea amiga de una clase y tenga acceso a todos sus miembros, habrá que definir un prototipo de esa función dentro de la clase, precediendo a la definición con la palabra friend.

class Clase
{
int EnteroPrivado;
public:
void FijaEntero(int N);
friend void FuncionAmiga(Clase &X,int N);
};
void FuncionAmiga(Clase &X,int N)
{
X.EnteroPrivado=N;//Acceso al miembro privado
}
// Si no fuese friend EnteroPrivado no estaría accesible desde
// fuera de la clase

Es necesario, como se ve en el ejemplo, que a la función amiga se le pase como parámetro un objeto de la clase de la cual es amiga.

Clases Amigas

De forma análoga, en la amistad en POO puede ocurrir que sea necesario que todos los miembros de una clase tengan que hacer uso de los miembros de otra. Se podrían declarar como funciones amigas todos los métodos de la primera. Sin embargo, es más fácil declarar como amiga la primera clase. Para ello, es necesario que, antes de declarar la clase de la cual es amiga la otra, se ponga como aviso el que haya una clase amiga.
class ClaseAmiga;
class Clase
{
int EnteroPrivado;
friend ClaseAmiga;
};

Ver más en aprendeinformaticas