M2103-TP2-Exo-2

Remarque préliminaire : cet exercice ne peut être effectué qu’après l’exercice 1 de ce même TP (opérateurs arithmétiques : + et -).

Récupérer les fichiers sources de l’exercice précédent.

Téléchargez le fichier
TestDureeRelops.cpp
.

Opérateur >

A la classe Duree, ajouter la surcharge de l’opérateur >.

Compiler le fichier TestCDureeRelops.cpp en mettant en commentaires les instructions contenant des erreurs.

Vous devez remarquer que > reste le seul opérateur accessible.

Opérateur <

Dans la classe Duree :

  1. remplacer l’opérateur > par l’opérateur <,
  2. inclure le fichier standard <utility> dans le fichier TestCDureeRelops.cpp,
  3. ajouter la clause using namespace rel_ops
  4. réactiver toutes les instructions du fichier qui utilisent les opérateurs de comparaison,
  5. recompiler le fichier TestCDureeRelops.cpp et tester.

Vous remarquez alors que le seul ajout de < rend possible l’utilisation des opérateurs <=, >= et >.

Cela est dû au fait que le C++ propose des versions génériques de <=, >= et >, définies à partir de < et qui s’instancient automatiquement en cas de besoin.

Il est donc totalement inutile et en général mauvais de surcharger les trois autres opérateurs.

Il peut être surprenant de ne pas obtenir les opérateurs == et != à partir de <, alors que c’est mathématiquement possible.

Mais c’est normal en informatique …

Opérateur !=

A la classe Duree, ajouter la surcharge de l’opérateur !=.

Compiler le fichier TestCDureeRelops.cxx en mettant en commentaires les instructions contenant des erreurs.

Vous remarquez alors que seule l’inégalité est ajoutée.

Opérateur ==

Remplacez alors la surcharge de != par celle de ==.

Normalement, toutes les instructions de TestCDureeRelops.cpp passent à la compilation.

Le seul ajout de == rend possible l’utilisation de l’opérateur !=.

Nous montrerons dans un qu’elle rend aussi possible l’utilisation de la fonction générique standard find() (et bien d’autres !).

Pour conclure :

  • une classe qui possède la surcharge de l’opérateur < est dite LessThanComparable.Elle possède alors une relation d’ordre.
  • une classe qui possède la surcharge de l’opérateur == est dite EqualityComparable.