Una funcion amiga no es un miembro de una clase, pero
todavia tiene acceso a sus elementos privados. Una funcion amiga se define como
una funcion no miembro normal. Sin embargo, dentro de la declaracion de clase
para la que sera una funcion amiga, esta tambien incluido su prototipo,
precedido por la palabra clave friend.
Ejemplo 1:
class myclass {
int n, d;
public:
myclass (int i, int j) { n = i; d= j; }
friend int isfactor (myclass ob);
};
int is factor (myclass ob)
{
return !(ob.n%ob.d);
}
main()
{
myclass ob1(10,2);
if (isfactor(ob1)) cout << "2 es factor de 10\n";
}
Ejemplo 2:
class vehicle {
public:
int speed;
};
class truck; declaracion forward de la clase
class car: private vehicle {
int passengers;
public:
car (int p, int s) { passengers=p; speed=s; }
friend int sp_greater (car c, truck t);
};
class truck: private vehicle {
int weight;
public:
truck (int w, int s) { weight = w; speed=s; }
friend int sp_greater (car c, truck t);
};
int sp_greater (car c, truck t)
{
return c.speed-t.speed;
};
main()
{
car c(6, 55);
truck t(10000, 55);
int sp=sp_greater (c, t);
if (t<0) cout << "El camion es mas rapido.";
else if (!t) cout << "La velocidad del carro y el camion es la misma";
else cout << "El carro es mas rapido";
cout << "\n";
}
Ejemplo 3:
class vehicle {
public:
int speed;
};
class truck;
class car: private vehicle {
int passengers;
public:
car (int p, int s) { passengers=p; speed=s; }
int sp_greater (truck t);
};
class truck: private vehicle {
int weight;
public:
truck (int w, int s) { weight = w; speed=s; }
friend int car::sp_greater (truck t);
};
int car::sp_greater (truck t)
{
return speed-t.speed;
};
main()
{
car c(6, 55);
truck t(10000, 55);
int sp=c.sp_greater (t);
if (t<0) cout << "El camion es mas rapido.";
else if (!t) cout << "La velocidad del carro y el camion es la misma";
else cout << "El carro es mas rapido";
cout << "\n";
}