RE:Que es una funcion amiga?
Una función amiga es una función que sin ser miembro de la clase tiene acceso a sus atributos. ¿Para qué sirve?
Imagina que quieres hacer que tu clase A se pueda escribir con
cout << A;
Como al poner eso se va a ejecutar cout.operator<< (A) y al cout no le puedes añadir métodos nuevos, no te queda más remedio que hacer eso con una función amiga. No recuerdo muy bien la sintaxis, pero sería algo así como
ostream &operator << (&ostream, A);
{
cout << A.campo1 << A.campo2 << ....;
}
a la que además tienes que hacer amiga de A.
Se bueno.