Para los operadores, considera el tipo que esta a la izquierda del operador. Son distintos cuando usas << y cuando usas ==
ostream << clase
clase == clase
Donde defines la funcion o metodo, depende del tipo de la izquierda del operador.
El primero de ellos se define fuera de la clase, el segundo dentro de la misma.
Los metodos al interior de la clase no necesitan especificar el operando de la izquierda del operador, pues se sobreentiende que se trata del objeto donde se ejecuta el metodo. Solo requieren especificar 1 parametro, el de la derecha del operador.
Cuando pones la firma de la funcion dentro de la clase, sin poner friend, el compilador te va reclamar no porque no pusiste "friend", te va a reclamar porque al ponerla dentro de la clase, es un metodo como el resto y el operator<< solo puede recibir 1 parametro y le estas pasando 2.
ostream << clase
clase == clase
Donde defines la funcion o metodo, depende del tipo de la izquierda del operador.
El primero de ellos se define fuera de la clase, el segundo dentro de la misma.
Los metodos al interior de la clase no necesitan especificar el operando de la izquierda del operador, pues se sobreentiende que se trata del objeto donde se ejecuta el metodo. Solo requieren especificar 1 parametro, el de la derecha del operador.
Cuando pones la firma de la funcion dentro de la clase, sin poner friend, el compilador te va reclamar no porque no pusiste "friend", te va a reclamar porque al ponerla dentro de la clase, es un metodo como el resto y el operator<< solo puede recibir 1 parametro y le estas pasando 2.