OVH Cloud OVH Cloud

Surchage opérateurs

1 réponse
Avatar
JM
Bonjour

J'ai une classe CDate que je veux pouvoir comparer à un entier.

donc dans la déclaration de CDate j'ai :

1) int operator < (int gauche);

Là pas de problème, ça marche.

Ensuite, je veux faire la même chose en mettant mon entier à gauche.
J'ai fini par péniblement trouver sur le net qu'il fallait faire :

2) friend int operator < (int droite, CDate &Gauche);

Pour voir si j'ai bien compris :
dans le cas 1), on surchage l'opérateur pour la classe CDate
dans le cas 2), on le surchage pour le type entier?

Merci

1 réponse

Avatar
James Kanze
JM wrote:

J'ai une classe CDate que je veux pouvoir comparer à un entier.

donc dans la déclaration de CDate j'ai :

1) int operator < (int gauche);

Là pas de problème, ça marche.

Ensuite, je veux faire la même chose en mettant mon entier à gauche.
J'ai fini par péniblement trouver sur le net qu'il fallait faire :

2) friend int operator < (int droite, CDate &Gauche);

Pour voir si j'ai bien compris :
dans le cas 1), on surchage l'opérateur pour la classe CDate
dans le cas 2), on le surchage pour le type entier?


Dans le cas 1), on surcharge l'opérateur pour la couple
(CDate x int), dans le cas 2), on le surcharge pour la couple
(int x CDate). En C++, l'opérateur < est toujours un opérateur
binaire.

Pour pouvoir surcharger, il faut qu'au moins un des opérands ait
un type défini par l'utilisateur (type de classe ou type
d'énumération). Si le premier opérand a un type classe,
l'opérateur peut être surchargé soit avec une fonction member,
soit avec une fonction libre. Dans tous les autres cas, il faut
une fonction libre.

En règle générale, on préfère la fonction libre dans tous les
cas, afin que les règles des conversions implicites s'appliquent
de la même façon des deux côtés. (On n'introduit jamais un
temporaire comme objet sur lequel est appelée une fonction
membre.)

--
James Kanze (Gabi Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34