Exercice 154 (91 revisité)
Ancien é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.
Commentaires
On peut facilement généraliser ce qui a été fait dans l’exercice précédent. La classe
vector > fait l’affaire, y compris pour l’affectation ou la transmission par
valeur. Mais, là encore, l’opérateur [] n’est pas protégé contre les débordements
d’indice. On peut résoudre le problème en utilisant, à sa place, la fonction membre at
qui déclenche une exception standard out_of_range en cas de débordement d’indice.
Dans le programme source, il faudra absolument laisser un espace entre les deux
symboles >, afin d’éviter toute confusion avec l’opérateur >>.
Voici un premier exemple (accompagné du résultat fourni par son exécution) où l’on se
contente d’utiliser la classe vector > et son opérateur [] :
#include
#include
using namespace std ;
main()
{ vector > t1 (4) ; // vecteur de 4 vecteurs
382
Précédent

- 383/398

Suivant