Exercice 130
Énoncé
Créer un patron de classes permettant de représenter des « vecteurs dynamiques »
c’est-à-dire des vecteurs dont la dimension peut ne pas être connue lors de la
compilation (ce n’est donc pas obligatoirement une expression constante comme
dans le cas de tableaux usuels). On prévoira que les éléments de ces vecteurs
puissent être de type quelconque.
On surdéfinira convenablement l’opérateur [] pour qu’il permette l’accès aux
éléments du vecteur (aussi bien en consultation qu’en modification) et on s’arrangera
pour qu’il n’existe aucun risque de « débordement d’indice ». En revanche, on ne
cherchera pas à régler les problèmes posés éventuellement par l’affectation ou la
transmission par valeur d’objets du type concerné.
N.B. Il ne faut pas chercher à utiliser les composants standard introduits par la
norme. En effet, le patron vector répondrait intégralement à la question.
En généralisant ce qui a été fait dans l’exercice 90 (sans toutefois initialiser les
éléments du vecteur lors de sa construction), nous aboutissons au patron de classes
suivant :
template class vect
{ int nelem ; // nombre d'elements
T * adr ; // adresse zone dynamique contenant les elements
public :
vect (int) ; // constructeur
~vect () ; // destructeur
T & operator [] (int) ; // operateur d'acces a un element
} ;
template vect::vect (int n)
{ adr = new T [nelem = n] ;
}
template vect::~vect ()
{ delete adr ;
}
template T & vect::operator [] (int i)
{ if ( (i<0) || (i>nelem) ) i = 0 ; // protection indice hors limites
return adr [i] ;
}
La définition du patron de classes serait plus simple si les fonctions membre étaient
319
Précédent

- 320/398

Suivant