Comparando objetos usando el operador bool ==

Entonces, después de leer algunas preguntas y respuestas de SO, todavía no entiendo por qué usar

friend bool operator==( BaseClass const &left, BaseClass const &right )

en lugar de

bool operator==( BaseClass const &right )

ahora mismo tengo algo como estohttp://pastebin.com/pKsTabC0 (Fijo) - y parece funcionar bien. Pero tal vez me esté perdiendo algo? ¿Alguna sugerencia?

Actualización 1

Ok cambié la fuente para que funcione bienhttp://ideone.com/fIAmB. Eliminado constantes y agregados innecesarios. Todavía no entiendo por qué usar amigos ...

Respuestas a la pregunta(4)

Su respuesta a la pregunta