Avatar ·

Reglas básicas y modismos de la sobrecarga de operadores en C++

¡Hola a todos! Estoy aprendiendo C++ y tratando de entender la sobrecarga de operadores. Escribí una clase simple para trabajar con números complejos, pero me encontré con un montón de problemas. Aquí está mi código: ```cpp class Complex { public: double real, imag; Complex(double r, double i) : real(r), imag(i) {} // Sobrecarga del operador + Complex operator+(Complex other) { return Complex(real + other.real, imag + other.imag); } // Sobrecarga del operador == bool operator==(Complex other) { return (real == other.real && imag == other.imag); } }; int main() { Complex a(3.0, 4.0); Complex b(1.0, 2.0); Complex c = a + b; // Funciona Complex d = 5.0 + a; // ¡Error! ¿Por qué? if (c == d) {} // Funciona, pero he oído que esto está mal return 0; } ``` Preguntas: 1. ¿Por qué `5.0 + a` no compila, aunque `a + 5.0` funciona? 2. ¿Sobrecargué correctamente `operator+`? ¿Qué es el "modismo de retorno por valor"? 3. ¿Cómo hacerlo correctamente?