Exercice 90
Énoncé
Définir une classe vect permettant de représenter des « vecteurs dynamiques
d’entiers », c’est-à-dire dont le nombre d’éléments peut ne pas être connu lors de la
compilation. Plus précisément, on prévoira de déclarer de tels vecteurs par une
instruction de la forme :
vect t(exp) ;
dans laquelle exp désigne une expression quelconque (de type entier).
On définira, de façon appropriée, l’opérateur [] de manière qu’il permette d’accéder
à des éléments d’un objet d’un type vect comme on le ferait avec un tableau
classique.
On ne cherchera pas à résoudre les problèmes posés éventuellement par l’affectation
ou la transmission par valeur d’objets de type vect. En revanche, on s’arrangera pour
qu’aucun risque de « débordement » d’indice n’existe.
NB. Le chapitre 21 vous montrera comment résoudre cet exercice à l’aide des
composants standard introduits par la norme, qu’il ne faut pas chercher à utiliser ici.
Il montrera également comment se protéger des débordements d’indice par une
technique de gestion d’exceptions.
Les éléments d’un objet de type vect doivent obligatoirement être rangés en mémoire
dynamique. L’emplacement correspondant sera donc alloué par le constructeur qui en
recevra la taille en argument. Le destructeur devra donc, naturellement, libérer cet
emplacement. En ce qui concerne l’accès à un élément, il se fera en surdéfinissant
l’opérateur [], comme nous l’avons déjà fait au cours des précédents exercices ;
rappelons qu’il faudra obligatoirement le faire sous forme d’une fonction membre.
Pour nous protéger d’un éventuel débordement d’indice, nous ferons en sorte qu’une
tentative d’accès à un élément situé en dehors du vecteur conduise à accéder à
l’élément de rang 0.
Voici ce que pourraient être la déclaration et la définition de notre classe :
/********** déclaration de la classe vect ********/
class vect
{ int nelem ; // nombre d'éléments
212
Énoncé
Définir une classe vect permettant de représenter des « vecteurs dynamiques
d’entiers », c’est-à-dire dont le nombre d’éléments peut ne pas être connu lors de la
compilation. Plus précisément, on prévoira de déclarer de tels vecteurs par une
instruction de la forme :
vect t(exp) ;
dans laquelle exp désigne une expression quelconque (de type entier).
On définira, de façon appropriée, l’opérateur [] de manière qu’il permette d’accéder
à des éléments d’un objet d’un type vect comme on le ferait avec un tableau
classique.
On ne cherchera pas à résoudre les problèmes posés éventuellement par l’affectation
ou la transmission par valeur d’objets de type vect. En revanche, on s’arrangera pour
qu’aucun risque de « débordement » d’indice n’existe.
NB. Le chapitre 21 vous montrera comment résoudre cet exercice à l’aide des
composants standard introduits par la norme, qu’il ne faut pas chercher à utiliser ici.
Il montrera également comment se protéger des débordements d’indice par une
technique de gestion d’exceptions.
Les éléments d’un objet de type vect doivent obligatoirement être rangés en mémoire
dynamique. L’emplacement correspondant sera donc alloué par le constructeur qui en
recevra la taille en argument. Le destructeur devra donc, naturellement, libérer cet
emplacement. En ce qui concerne l’accès à un élément, il se fera en surdéfinissant
l’opérateur [], comme nous l’avons déjà fait au cours des précédents exercices ;
rappelons qu’il faudra obligatoirement le faire sous forme d’une fonction membre.
Pour nous protéger d’un éventuel débordement d’indice, nous ferons en sorte qu’une
tentative d’accès à un élément situé en dehors du vecteur conduise à accéder à
l’élément de rang 0.
Voici ce que pourraient être la déclaration et la définition de notre classe :
/********** déclaration de la classe vect ********/
class vect
{ int nelem ; // nombre d'éléments
212
