Règles de base et idiomes de surcharge des opérateurs en C++
Bonjour à tous ! J'apprends le C++ et j'essaie de comprendre la surcharge des opérateurs. J'ai écrit une classe simple pour travailler avec des nombres complexes, mais j'ai rencontré un tas de problèmes. Voici mon code :
```cpp
class Complex {
public:
double real, imag;
Complex(double r, double i) : real(r), imag(i) {}
// Surcharge de l'opérateur +
Complex operator+(Complex other) {
return Complex(real + other.real, imag + other.imag);
}
// Surcharge de l'opérateur ==
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; // Fonctionne
Complex d = 5.0 + a; // Erreur ! Pourquoi ?
if (c == d) {} // Fonctionne, mais j'ai entendu dire que c'est incorrect
return 0;
}
```
Questions :
1. Pourquoi `5.0 + a` ne compile pas, alors que `a + 5.0` fonctionne ?
2. Ai-je correctement surchargé `operator+` ? Qu'est-ce que "l'idiome de retour par valeur" ?
3. Comment surcharger correctement