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