Exercice 131
Énoncé
Comme dans l’exercice précédent, réaliser un patron de classes permettant de
manipuler des vecteurs dont les éléments sont de type quelconque mais pour lesquels
la dimension, supposée être cette fois une expression constante, apparaîtra comme un
paramètre (expression) du patron. Hormis cette différence, les « fonctionnalités » du
patron resteront les mêmes.
Il n’est plus nécessaire d’allouer un emplacement dynamique pour notre vecteur qui
peut donc figurer directement dans les membres donnée de notre patron. Le constructeur
n’est plus nécessaire (voir toutefois la remarque ci-dessous), pas plus que le
destructeur. Voici ce que pourrait être la définition de notre patron :
template class vect
{ T v [n] ; // vecteur de n elements de type T
public :
T & operator [] (int) ; // operateur d'acces a un element
} ;
template T & vect::operator [] (int i)
{ if ( (i<0) || (i>n) ) i = 0 ; // protection indice hors limites
return v [i] ;
}
Voici, toujours à titre indicatif, ce que deviendrait le petit programme d’essai :
#include "vectgen1.h"
#include
using namespace std ;
main()
{ vect vi ;
vi[5] = 5 ; vi[2] = 2 ;
cout << vi[2] << " " << vi[5] << "\n" ;
vect vd ;
vd[0] = 0.0 ; vd[1] = 0.1 ; vd[2] = 0.2 ;
cout << vd[0] << " " << vd[1] << " " << vd[2] << "\n" ;
cout << vd[12] << "\n" ;
vd[12] = 1.2 ; cout << vd[12] << " " << vd[0] ;
}
Ici, nous n’avons pas eu besoin de faire du nombre d’éléments un membre donnée de
nos classes patron : en effet, lorsqu’on en a besoin, on l’obtient comme étant la valeur
du second paramètre fourni lors de l’instanciation. Si nous avions voulu conserver ce
321
Précédent

- 322/398

Suivant