Estaba leyendo the C++ FAQ. Allí me encontré con un punto en la guía para la sobrecarga de operadores utiliza:Importancia del operador de sobrecarga -() como función libre y no función de miembro?
Si proporciona operadores constructivos, deben permitir la promoción del operando de la izquierda (al menos en el caso en que la clase tiene un ctor de un solo parámetro eso no está marcado con la palabra clave explícita). Por ejemplo, si su clase Fraction admite la promoción de int a Fraction (a través del cóctel no explícito Fraction :: Fraction (int)), y si permite x - y para dos objetos Fraction, también debe permitir 42 - y. En la práctica, eso simplemente significa que su operador-() no debe ser una función miembro de Fraction. Normalmente lo harás amigo, aunque solo sea para forzarlo en público: parte de la clase, pero incluso si no es un amigo, no debería ser miembro.
¿Por qué el autor ha escrito que operator-() no debería ser función de miembro?
¿Cuáles son las malas consecuencias si hago operador-() como función miembro y cuáles son otras consecuencias?
Tenga en cuenta que el título es incorrecto: 'operator()' no se puede implementar como una función libre. La mayoría de los operadores pueden, pero no todos. La cita se refiere a 'operador-', no 'operador()' –
posible duplicado de [¿Debería el operador << ser implementado como un amigo o como una función miembro?] (Http://stackoverflow.com/questions/236801/should -operador-ser-implementado-como-un-amigo-o-como-un-miembro-función) –