Avatar ·

Regras básicas e expressões idiomáticas de sobrecarga de operadores em C++

Olá a todos! Estou estudando C++ e tentando entender a sobrecarga de operadores. Escrevi uma classe simples para trabalhar com números complexos, mas encontrei vários problemas. Aqui está meu código: ```cpp class Complex { public: double real, imag; Complex(double r, double i) : real(r), imag(i) {} // Sobrecarga do operador + Complex operator+(Complex other) { return Complex(real + other.real, imag + other.imag); } // Sobrecarga do 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; // Erro! Por quê? if (c == d) {} // Funciona, mas ouvi dizer que isso está errado return 0; } ``` Perguntas: 1. Por que `5.0 + a` não compila, embora `a + 5.0` funcione? 2. Sobrecarreguei `operator+` corretamente? O que é a "expressão idiomática de retorno por valor"? 3. Como fazer corretamente