se usi una funzione membro l'oggetto della classe è implicito ed è il primo operando, se usi una funzione esterna friend invece è esplicito e il primo membro potrebbe non appartenere alla classe.
Per esempio se hai una classe complex e vuoi sommare un reale ad un complex con il numero reale come primo operando devi usare per forza una funzione esterna.
Se vuoi confrontare due oggetti appartenenti alla stessa classe puoi usare una funzione membro.
ciao
sergio