Comparando objetos usando o operador bool ==

Então, depois de ler algumas perguntas e respostas, eu ainda não entendo porque usar

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

ao invés de

bool operator==( BaseClass const &right )

agora eu tenho algo parecido com istohttp://pastebin.com/pKsTabC0 (Fixo) - e parece funcionar bem. Mas talvez eu esteja perdendo alguma coisa? Alguma sugestão?

Atualização 1

Ok, eu mudei a fonte para dar certohttp://ideone.com/fIAmB. Removido virtual desnecessário e adicionado const. Ainda não entendi porque usar amigos ...

questionAnswers(4)

yourAnswerToTheQuestion