Funciones operadoras amigas
Es posible que una función operador sea amiga de una clase en vez de miembro, las funciones amigas no tienen el operador implícito this por tanto cuando se usa una función amiga para sobrecargar un operador, se pasan los dos operandos cuando se está sobrecargando un operador binario y un solo operando cuando el operador es unario.
punto a;
punto b:
b=a+5;
Esta operación debe retornar un punto cuyas coordenadas serán las de a incrementadas en 5.
punto punto :: operator + (int i)
{
punto temp;
temp.x=p.x+i;
temp.y=p.y+i;
temp.z=p.z+i;
return temp;
}
Esta función resolvería expresiones como a+5 pero no funcionaría si la expresión estuviese invertida, es decir, 5+a. Para resolver este problema se usa la sobrecarga de operadores mediante funciones friend, ya que podemos escpecificar el orden de todos los parámetros, porque no existen parámetros implícitos.
El problema del doble orden de los operadores de una suma, solo puede ser resuelto escribiendo dos funciones friend.
punto operator + (punto p, int i)
{
punto temp;
temp.x=p.x+i;
temp.y=p.y+i;
temp.z=p.z+i;
return temp;
}
punto operator + (int i, punto p)
{
punto temp;
temp.x=p.x+i;
temp.y=p.y+i;
temp.z=p.z+i;
return temp;
}