Exercice 91
Énoncé
En s’inspirant de l’exercice précédent, on souhaite créer une classe int2d permettant
de représenter des tableaux dynamiques d’entiers à deux indices, c’est-à-dire dont
les dimensions peuvent ne pas être connues lors de la compilation. Plus précisément,
on prévoira de déclarer de tels tableaux par une déclaration de la forme :
int2d t(exp1, exp2) ;
dans laquelle exp1 et exp2 désignent une expression quelconque (de type entier).
On surdéfinira l’opérateur (), de manière qu’il permette d’accéder à des éléments
d’un objet d’un type int2d comme on le ferait avec un tableau classique.
Là encore, on ne cherchera pas à résoudre les problèmes posés éventuellement par
l’affectation ou la transmission par valeur d’objets de type int2d. En revanche, on
s’arrangera pour qu’il n’existe aucun risque de débordement d’indice.
N. B. 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 contre les débordements d’indice par une
technique de gestion d’exceptions.
Comme dans l’exercice précédent, les éléments d’un objet de type int2d doivent
obligatoirement être rangés en mémoire dynamique. L’emplacement correspondant sera
donc alloué par le constructeur qui en déduira la taille des deux dimensions reçues en
arguments Le destructeur libérera cet emplacement.
Nous devons décider de la manière dont seront rangés les différents éléments en
mémoire, à savoir « par ligne » ou « par colonne » (en toute rigueur, cette terminologie
fait référence à la façon dont on a l’habitude de visualiser des tableaux à deux
dimensions, ce que l’on nomme une ligne correspondant en fait à des éléments ayant
même valeur du premier indice). Nous choisirons ici la première solution (c’est celle
utilisée par C ou C++ pour les tableaux à deux dimensions). Ainsi, un élément repéré
par les valeurs i et j des 2 indices sera situé à l’adresse (adv désignant l’adresse de
l’emplacement dynamique alloué au tableau) :
adv + i * ncol + j
214
Précédent

- 215/398

Suivant