2010-03-21 4 views
6

Si vous surchargez - comme opérateur-(), il doit être utilisé à gauche de l'objet, mais surchargé() comme opérateur()() il est utilisé à droite de l'objet. Comment savons-nous quel opérateur doit être utilisé sur la gauche et quels sont ceux qui doivent être utilisés sur la droite?Surcharge de l'opérateur en C++

+2

Cela a une réponse simple, mais du point de vue de quelqu'un de nouveau à la programmation, je peux imaginer que cela pourrait être une source de maux de tête. +1 –

Répondre

3

Regardez le operator precedence chart. Cela vous indiquera la direction que l'opérateur associe (lie). Notez que certains opérateurs ont plusieurs formes avec des significations différentes, telles que binaire et unaire -. Dans ce cas, vous pouvez avoir plusieurs surcharges, .: par exemple

T operator-() 

et:

T operator-(const T &o) 

Le compilateur choisit la bonne base sur l'interprétation de l'opérateur syntaxique.

Voir aussi cet élément utile set of guidelines.

+0

Est-ce que 'operator-()' ne renvoie vraiment rien - ne devrait-il pas renvoyer une valeur du type approprié qui est soit la négation de la valeur, soit la différence entre les valeurs? –

+0

Merci d'avoir attrapé ça, Jonathan. Fixé maintenant –

1

La plupart des opérateurs unaires ne peuvent être placés que du côté spécifié de leur opérande. Pour les deux cas particuliers, ++ et --, voir this FAQ.