Opérateurs arithmétiques et de comparaison
Surcharger +, -, *, /, ==, < et les opérateurs associés en suivant les bonnes pratiques
Opérateurs arithmétiques et de comparaison est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.
Pourquoi surcharger les opérateurs ?
La surcharge des opérateurs permet à vos types de se comporter comme les types intégrés : v1 + v2 est plus lisible que v1.add(v2). Utilisez-la pour les types-valeurs comme les vecteurs, les nombres complexes et les montants monétaires.
Définir operator+
Vous pouvez surcharger + en tant que membre ou fonction libre. Les fonctions libres sont plus symétriques.
struct Vec2 {
double x, y;
Vec2 operator+(const Vec2& other) const {
return {x + other.x, y + other.y};
}
};Forme avec fonction libre
Une fonction libre donne le même statut aux deux opérandes, ce qui est utile lorsqu'une conversion peut s'appliquer à l'un ou l'autre côté.
Vec2 operator+(const Vec2& a, const Vec2& b) {
return {a.x + b.x, a.y + b.y};
}Opérateurs d'affectation composée
Implémentez d'abord +=, puis construisez + à partir de celui-ci. Il s'agit de l'idiome canonique.
Vec2& operator+=(const Vec2& other) {
x += other.x;
y += other.y;
return *this;
}
Vec2 operator+(Vec2 lhs, const Vec2& rhs) {
lhs += rhs;
return lhs;
}Opérateurs unaires
Certains opérateurs sont unaires : -x, +x, !x, ~x, ++x, --x.
Vec2 operator-() const { return {-x, -y}; }Incrémentation préfixée ou postfixée
La forme préfixée ne prend aucun paramètre ; la forme postfixée prend un int factice pour lever l'ambiguïté.
Counter& operator++(); // prefix
Counter operator++(int); // postfixOpérateurs de comparaison
Les opérateurs de comparaison renvoient bool. Les fonctions libres sont les plus adaptées pour assurer la cohérence.
bool operator==(const Vec2& a, const Vec2& b) {
return a.x == b.x && a.y == b.y;
}
bool operator!=(const Vec2& a, const Vec2& b) { return !(a == b); }Inférieur à pour le classement
Si votre type doit être trié ou utilisé comme clé d'une table associative, définissez operator<. Les autres opérateurs relationnels en découlent.
Opérateurs symétriques sur types mixtes
Pour prendre en charge 3 + vec aussi bien que vec + 3, définissez les deux formes, ou utilisez une fonction libre qui effectue la conversion.
Éviter les surprises
Les opérateurs surchargés doivent se comporter de manière intuitive. Ne redéfinissez pas + pour lui faire signifier une soustraction. Respectez l'algèbre conventionnelle de l'opérateur.
Opérateurs que vous ne pouvez pas surcharger
Certains opérateurs sont interdits :
?:— ternaire.— accès aux membres (mais->peut être surchargé)::— résolution de portéesizeof,alignof,typeid
Vérification rapide
Quel est le schéma d'implémentation canonique de operator+ pour un type défini par l'utilisateur ?
Récapitulatif
La surcharge des opérateurs permet aux types définis par l'utilisateur de se comporter naturellement. Implémentez d'abord l'affectation composée, puis les opérations arithmétiques simples. Il est préférable d'implémenter les opérateurs de comparaison comme des fonctions libres. Respectez les sémantiques conventionnelles : toute surprise est un bogue.
Questions Fréquemment Posées
La leçon « Opérateurs arithmétiques et de comparaison » est-elle gratuite ?
Oui — le texte complet de « Opérateurs arithmétiques et de comparaison » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Opérateurs arithmétiques et de comparaison » ?
Surcharger +, -, *, /, ==, < et les opérateurs associés en suivant les bonnes pratiques Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C++ Academy ?
Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Opérateurs arithmétiques et de comparaison » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?
Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Opérateurs arithmétiques et de comparaison
- Opérateurs d’insertion et d’extraction de flux
- Opérateurs d’indice et d’appel de fonction
- Opérateur de comparaison à trois voies en C++20