Rappels
C++ vous permet de surdéfinir les opérateurs existants, c’est-à-dire de leur donner une
nouvelle signification lorsqu’ils portent (en partie ou en totalité) sur des objets de type
classe.
Le mécanisme de la surdéfinition d’opérateurs
Pour surdéfinir un opérateur existant op, on définit une fonction nommée operator op (on
peut placer un ou plusieurs espaces entre le mot operator et l’opérateur, mais ce n’est
pas une obligation) :
soit sous forme d’une fonction indépendante (généralement amie d’une ou de
plusieurs classes) ;
soit sous forme d’une fonction membre d’une classe.
Dans le premier cas, si op est un opérateur binaire, la notation a op b est équivalente à :
operator op (a, b)
Dans le second cas, la même notation est équivalente à :
a.operator op (b)
Les possibilités et les limites de la surdéfinition
d'opérateurs
On doit se limiter aux opérateurs existants, en conservant leur « pluralité » (unaire,
binaire). Les opérateurs ainsi surdéfinis gardent leur priorité et leur associativité
habituelle (voir tableau récapitulatif, un peu plus loin).
Un opérateur surdéfini doit toujours posséder un opérande de type classe (on ne peut
donc pas modifier les significations des opérateurs usuels). Il doit donc s’agir :
soit d’une fonction membre, auquel cas elle dispose obligatoirement d’un argument
implicite du type de sa classe (this) ;
soit d’une fonction indépendante (ou plutôt amie) possédant au moins un argument de
type classe.
Il ne faut pas faire d’hypothèse sur la signification a priori d’un opérateur ; par
196
C++ vous permet de surdéfinir les opérateurs existants, c’est-à-dire de leur donner une
nouvelle signification lorsqu’ils portent (en partie ou en totalité) sur des objets de type
classe.
Le mécanisme de la surdéfinition d’opérateurs
Pour surdéfinir un opérateur existant op, on définit une fonction nommée operator op (on
peut placer un ou plusieurs espaces entre le mot operator et l’opérateur, mais ce n’est
pas une obligation) :
soit sous forme d’une fonction indépendante (généralement amie d’une ou de
plusieurs classes) ;
soit sous forme d’une fonction membre d’une classe.
Dans le premier cas, si op est un opérateur binaire, la notation a op b est équivalente à :
operator op (a, b)
Dans le second cas, la même notation est équivalente à :
a.operator op (b)
Les possibilités et les limites de la surdéfinition
d'opérateurs
On doit se limiter aux opérateurs existants, en conservant leur « pluralité » (unaire,
binaire). Les opérateurs ainsi surdéfinis gardent leur priorité et leur associativité
habituelle (voir tableau récapitulatif, un peu plus loin).
Un opérateur surdéfini doit toujours posséder un opérande de type classe (on ne peut
donc pas modifier les significations des opérateurs usuels). Il doit donc s’agir :
soit d’une fonction membre, auquel cas elle dispose obligatoirement d’un argument
implicite du type de sa classe (this) ;
soit d’une fonction indépendante (ou plutôt amie) possédant au moins un argument de
type classe.
Il ne faut pas faire d’hypothèse sur la signification a priori d’un opérateur ; par
196
