Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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: kanze.james@neuf.fr
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
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