Adela
Al sobrecargar el operador de inserción de flujo y el operador de extracción de flujo, debe conocer el objeto del lado izquierdo, por ejemplo, escribimos cout << ”hola mundo”; ahora mire el objeto del lado izquierdo en esta declaración que es cout y este objeto no es el objeto de la clase que está desarrollando, cout es un objeto de la clase ostream. Ahora podemos convertir una función en una función miembro de una clase en la situación en la que el objeto del lado izquierdo del operador pertenece a la misma clase que estamos desarrollando.
Supongamos que tengo una clase de fecha y estoy sobrecargando + operador para la clase de datos
Para poder agregar dos fechas,
Por ejemplo d3 = d1 + d2; donde d1, d2, d3 son los objetos de la clase de fecha ahora mire el operador + el operando del lado izquierdo del operador + es d1 que es el objeto de la clase de fecha ahora significa que podemos sobrecargar el operador + como una función miembro de la clase,
mira otro ejemplo d3 = 5 + d2; ahora el operando del lado izquierdo es 5, que no es el objeto de la fecha de la clase, por lo que no podemos hacer que esta función sea una función miembro.
Tenemos que convertirla en una función amiga.