Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
operateurs [2014/10/10 01:34] gbdivers |
operateurs [2015/03/22 16:30] (Version actuelle) gbdivers [Opérateurs arithmétiques] |
||
---|---|---|---|
Ligne 14: | Ligne 14: | ||
</code> | </code> | ||
- | Il n'est pas forcement pertinent de créer tous les opérateurs (une classe peut être comparable par égalité sans être comparable par plus-petit-que par exemple), mais lorsque l'on définit certain opérateur, il est logique de définir certains autres opérateurs : | + | Il n'est pas forcement pertinent de créer tous les opérateurs (une classe peut être comparable par égalité sans être comparable par plus-petit-que par exemple), mais lorsque l'on définit certains opérateurs, il est logique de définir certains autres opérateurs : |
* égalité == et différent != | * égalité == et différent != | ||
- | * < et >, <= et < | + | * < et >, ≤ et ≥ |
* +a et -a | * +a et -a | ||
* + et +=, - et -=, * et *=, / et /=, % et %= | * + et +=, - et -=, * et *=, / et /=, % et %= | ||
Ligne 24: | Ligne 24: | ||
* ~, &, |, <<, >> et ^ | * ~, &, |, <<, >> et ^ | ||
- | A voir, pour chaque classe, s'il est pertinent ou non de créer les opérateurs. | + | A voir, pour chaque classe, s'il est pertinent ou non de créer ces opérateurs. |
===== Opérateurs libres et membres ===== | ===== Opérateurs libres et membres ===== | ||
Ligne 60: | Ligne 60: | ||
</code> | </code> | ||
- | Avec la fonction membre, l'opérateur s'applique sur l'objet appelé (this) et sur l'objet passé en argument. Avec la fonction libre, comparaison des objets passé en argument | + | Avec la fonction membre, l'opérateur s'applique sur l'objet appelé (this) et sur l'objet passé en argument. Avec la fonction libre, comparaison des objets passés en argument |
<note warning>Attention sur la syntaxe. Si on sépare la définition et l'implémentation de la fonction membre, on va écrire : | <note warning>Attention sur la syntaxe. Si on sépare la définition et l'implémentation de la fonction membre, on va écrire : | ||
Ligne 72: | Ligne 72: | ||
</code> | </code> | ||
- | Il faut bien faire attention à ne pas confondre la fonction membre A::operator et la fonction operator (sans le spécificateur de portée A::). La première version (membre) s'applique sur l'objet courant et n'a donc besoin que d'une seul paramètre de fonction ''A::operator==(A a)''. Le second doit prendre deux argument ''operator==(A a, A b)''. | + | Il faut bien faire attention à ne pas confondre la fonction membre A::operator et la fonction operator (sans le spécificateur de portée A::). La première version (membre) s'applique sur l'objet courant et n'a donc besoin que d'une seul paramètre de fonction ''A::operator==(A a)''. Le second doit prendre deux arguments ''operator==(A a, A b)''. |
</note> | </note> | ||
Ligne 144: | Ligne 144: | ||
__ en annexe ? __ | __ en annexe ? __ | ||
- | Déjà utilisé. Et écrit dans les prédicat | + | Déjà utilisé. Et écrit dans les prédicats |
==== Opérateurs de comparaison ==== | ==== Opérateurs de comparaison ==== | ||
Ligne 187: | Ligne 187: | ||
</code> | </code> | ||
+ | Problème avec rvalue, use reference qualifier, cf : http://stackoverflow.com/questions/28026352/is-there-any-real-use-case-for-functions-reference-qualifiers | ||
===== Les opérateurs d'incrémentation et décrémentation ===== | ===== Les opérateurs d'incrémentation et décrémentation ===== | ||
- | ++ et --. Deux version, en préfixe et postfixe. Quand on écrit operator++, il faut savoir si on défini ++a ou a++. Pour régler ce problème, on ajoute un paramètre qui ne sert pas dans l'opération : | + | ++ et --. Deux versions, en préfixe et postfixe. Quand on écrit operator++, il faut savoir si on défini ++a ou a++. Pour régler ce problème, on ajoute un paramètre qui ne sert pas dans l'opération : |
<code cpp> | <code cpp> | ||
Ligne 230: | Ligne 231: | ||
</code> | </code> | ||
- | ===== Opérateursparticuliers ===== | + | ===== Opérateurs particuliers ===== |