Copy of https://perso.isima.fr/loic/cpp/td_const_ref.php
tete du loic

 Loïc YON [KIUX]

  • Enseignant-chercheur
  • Référent Formation Continue
  • Responsable des contrats pros ingénieur
  • Référent entrepreneuriat
  • Responsable de la filière F2 ingénieur
  • Secouriste Sauveteur du Travail
mail
loic.yon@isima.fr
phone
(+33 / 0) 4 73 40 50 42
location_on
Institut d'informatique ISIMA
  • twitter
  • linkedin
  • viadeo

[++C] TD : const &

 Cette page commence à dater. Son contenu n'est peut-être plus à jour. Contactez-moi si c'est le cas!

Date de première publication : 2012/10/19

Références, const et const référence

  1. Ecrire une fonction maxx() qui prend deux paramètres de type int et qui renvoie le plus grand des deux.
  2. Tester avec deux variables enttières et deux valeurs immédiates
  3. Modifier maxx() pour minimiser le nombre de copies des paramètres. Que constatez-vous ?
  • Passer les paramètres par référence fait que les valeurs immédiates ne sont plus utilisables
  • Renvoyer une référence avec la fonction fait que la valeur de retour est copiée
  1. Corriger pour minimiser le nombre de copies et accepter tout de même les valeurs immédiates.

Pour que cela marche pour tout type et pour toute valeur immédiate, il faut en fait que les paramètres et le type de retour soient des const inst &.

Utiliser des références

  1. Créer une classe WrapInt qui encapsule une valeur entière value, cette valeur est fixée à l'instanciation d'un objet de classe WrapInt et consultable avec une méthode getValue().
  2. Ajouter un attribut statique qui compte le nombre de création d'objets (quelque soit le constructeur !)
  3. Vous aurez probablement besoin des opérateurs < et <<
  4. Vérifier que la version maxx() avec les références ne crée pas d'objet supplémentaire par rapport à la version qui n'utilise pas les références.

Dans le code ci-dessous, le nombre minimal de constructions est de 2 (instanciations de a et b). Si la fonction maxx() est mal écrite, on peut en avoir 5 (copie de chaque paramètre et retour de la fonction).

   WrapInt a(2),b(3);
   cout << maxx(a,b);

Vous avez écrit plusieurs fois la fonction maxx(), vous ne voulez pas en faire une version générique ?