unarios sobrecarga sencillos relacionales operadores numeros matrices insercion extraccion ejemplos complejos c++ operator-overloading

c++ - sencillos - ¿Cuál es la diferencia entre sobrecargar a un operador dentro o fuera de una clase?



sobrecarga de operadores relacionales (1)

El operator+ miembro operator+ requiere que el LHS sea un a - El operador libre requiere que LHS o RHS sea un b y el otro lado sea convertible a b

struct Foo { Foo() {} Foo(int) {} Foo operator+(Foo const & R) { return Foo(); } }; struct Bar { Bar() {} Bar(int) {} }; Bar operator+(Bar const & L, Bar const & R) { return Bar(); } int main() { Foo f; f+1; // Will work - the int converts to Foo 1+f; // Won''t work - no matching operator Bar b; b+1; // Will work - the int converts to Bar 1+b; // Will work, the int converts to a Bar for use in operator+ }

En C ++, sé que hay dos maneras de sobrecargar. Podemos sobrecargarlo dentro (como clase a ) o fuera (como clase b ). Pero, la pregunta es, ¿hay alguna diferencia entre estos dos en tiempo de compilación o en tiempo de ejecución o no?

class a { public: int x; a operator+(a p) // operator is overloaded inside class { a temp; temp.x = x; temp.x = p.x; return temp; } }; class b { public: friend b operator+(b, b); int x; }; b operator+(b p1, b p2) // operator is overloaded outside class { p1.x += p2.x; return p1; }