La prima è la funzione amico esterna (funzione libera)
friend bool operator== (MyClass &lhs, MyClass &rhs);
La seconda è la funzione di membro
bool MyClass::operator== (MyClass &rhs);
Si dovrebbe usare la seconda variante sempre allora si può
Si dovrebbe usare prima variante in case: 1) Il primo argomento è la classe esterna (libreria)
friend ostream& operator<< (ostream &out, MyClass &m)
2) la logica dell'operatore non correlati alla propria classe e deve essere implementato separatamente
friend bool operator(const MyClass& my, const std::string& string_form)
(perché la vostra classe non può sapere tutto di classi che possono avere bisogno di confrontare le operatore)
fonte
2012-04-09 07:16:29
È possibile trovare la risposta a questa domanda e molte altre nelle [Domande frequenti sul sovraccarico dell'operatore] (http://stackoverflow.com/questions/4421706/operator-overloading) :) –
La sezione Domande frequenti "Gli operatori di confronto binario di infissi dovrebbe, secondo le regole del pollice, essere implementato come funzioni non membro "ma non giustifica il motivo per cui esiste questa regola - http://stackoverflow.com/questions/4421706/operator-overloading/4421719#4421719 – danio