Czytałem the C++ FAQ. Nie znalazłem punkt w wytycznej przeciążenia operatora korzysta:Znaczenie przeciążania operatora -() jako funkcji bezpłatnej, a nie funkcji członka?
Jeśli podasz konstruktywne operatorów, powinny one pozwolić promocji operandu lewostronnego (przynajmniej w przypadku, gdy klasa ma konstruktor pojedynczego parametru który nie jest oznaczony jawnym słowem kluczowym). Na przykład, jeśli Twoja frakcja klasowa obsługuje promocję z int do frakcji (za pomocą nieostrego ctor Frakcja :: ułamek (int)), a jeśli zezwolisz na x - y dla dwóch obiektów frakcji, powinieneś także zezwolić na 42 - y. W praktyce oznacza to po prostu, że operator-() nie powinien być członkiem funkcji frakcji. Zazwyczaj uczynisz go przyjacielem, jeśli nie z innego powodu, niż zmusić go do publicznego: część klasy, ale nawet jeśli nie jest przyjacielem, nie powinien być członkiem.
Dlaczego autor napisał, że operator-() nie powinien być funkcją członka?
Jakie są złe konsekwencje, jeśli ustawię funkcję operatora() jako członka i jakie są inne konsekwencje?
Należy pamiętać, że tytuł jest nieprawidłowy: 'operator()' nie może być zaimplementowany jako funkcja bezpłatna. Większość operatorów może, ale nie wszystkie. Cytat dotyczy 'operator-', a nie 'operator()' –
możliwy duplikat [powinien być operator << realizowany jako przyjaciel lub funkcja członka?] (Http://stackoverflow.com/questions/236801/should -operator-być-zaimplementowany-jako-przyjaciel-lub-jako-członek-funkcja-funkcji) –