Avatar ·

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