Règles de base et idiomes de surcharge des opérateurs en C++
Bonjour à tous ! J'étudie le C++ depuis environ six mois, et je suis confus au sujet de la surcharge des opérateurs. Je comprends apparemment la syntaxe, mais je rencontre constamment des problèmes.
Par exemple, j'ai essayé d'écrire une classe simple Vector2D pour des vecteurs bidimensionnels avec surcharge de l'opérateur +. Voici mon code :
```cpp
class Vector2D {
public:
Vector2D(double x, double y) : x_(x), y_(y) {}
Vector2D operator+(const Vector2D& other) {
return Vector2D(x_ + other.x_, y_ + other.y_);
}
// Problème : pourquoi ne puis-je pas écrire 2.0 + v ?
// Ou v1 + v2 + v3 ?
private:
double x_, y_;
};
```
Quand j'essaie d'utiliser `Vector2D v3 = 2.0 + v1;`, le compilateur se plaint. Aussi, je ne suis pas sûr de comment surcharger correctement les opérateurs `<<` pour l'affichage avec cout, et quand retourner une référence, et quand retourner une valeur.
Puis-je obtenir un résumé des règles de base et des idiomes pour la surcharge des opérateurs ? Quels opérateurs peut-on surcharger, et lesquels non ? Quand les fonctions friend sont-elles nécessaires ? Et comment faire pour