Exercice 107
Énoncé
Soit une classe int2d (telle que celle créée dans l’exercice 91) permettant de
manipuler des « tableaux dynamiques » d’entiers à deux dimensions dont la
déclaration (fournie dans le fichier int2d.h) se présente ainsi :
class int2d
{ int nlig ; // nombre de "lignes"
int ncol ; // nombre de "colonnes"
int * adv ; // adresse emplacement dynamique contenant les valeurs
public :
int2d (int nl, int nc) ; // constructeur
~int2d () ; // destructeur
int & operator () (int, int) ; // accès à un élément, par ses 2 "indices"
} ;
On suppose que le constructeur alloue effectivement l’emplacement nécessaire et que
l’opérateur [] peut être utilisé indifféremment dans une expression ou à gauche d’une
affectation.
Créer une classe int2db, dérivée de int2d, permettant de manipuler des tableaux
dynamiques, dans lesquels on peut fixer les « bornes » (valeur minimale et valeur
maximale) des deux indices ; les quatre valeurs correspondantes seront fournies en
arguments du constructeur de int2db.
On ne se préoccupera pas, ici, des problèmes éventuellement posés par la recopie ou
l’affectation d’objets de type int2db.
Il suffit, en fait, de généraliser à la classe int2d le travail réalisé dans l’exercice
précédent pour la classe vect. Voici ce que pourrait être notre classe int2db (ici, on ne
trouve qu’une définition, dans la mesure où les fonctions membre de int2db ont été
fournies en ligne) :
#include "int2d.h"
class int2db : public int2d
{ int ligdeb, ligfin ; // bornes (mini, maxi) premier indice
int coldeb, colfin ; // bornes (mini, maxi) second indice
public : // constructeur
int2db (int ld, int lf, int cd, int cf) : int2d (lf-ld+1, cf-cd+1)
{ ligdeb = ld ; ligfin = lf ;
coldeb = cd ; colfin = cf ;
}
int & int2db::operator () (int i, int j // redéfinition de operator ()
{ return int2d::operator () (i-ligdeb, j-coldeb) ;
}
} ;
254
Énoncé
Soit une classe int2d (telle que celle créée dans l’exercice 91) permettant de
manipuler des « tableaux dynamiques » d’entiers à deux dimensions dont la
déclaration (fournie dans le fichier int2d.h) se présente ainsi :
class int2d
{ int nlig ; // nombre de "lignes"
int ncol ; // nombre de "colonnes"
int * adv ; // adresse emplacement dynamique contenant les valeurs
public :
int2d (int nl, int nc) ; // constructeur
~int2d () ; // destructeur
int & operator () (int, int) ; // accès à un élément, par ses 2 "indices"
} ;
On suppose que le constructeur alloue effectivement l’emplacement nécessaire et que
l’opérateur [] peut être utilisé indifféremment dans une expression ou à gauche d’une
affectation.
Créer une classe int2db, dérivée de int2d, permettant de manipuler des tableaux
dynamiques, dans lesquels on peut fixer les « bornes » (valeur minimale et valeur
maximale) des deux indices ; les quatre valeurs correspondantes seront fournies en
arguments du constructeur de int2db.
On ne se préoccupera pas, ici, des problèmes éventuellement posés par la recopie ou
l’affectation d’objets de type int2db.
Il suffit, en fait, de généraliser à la classe int2d le travail réalisé dans l’exercice
précédent pour la classe vect. Voici ce que pourrait être notre classe int2db (ici, on ne
trouve qu’une définition, dans la mesure où les fonctions membre de int2db ont été
fournies en ligne) :
#include "int2d.h"
class int2db : public int2d
{ int ligdeb, ligfin ; // bornes (mini, maxi) premier indice
int coldeb, colfin ; // bornes (mini, maxi) second indice
public : // constructeur
int2db (int ld, int lf, int cd, int cf) : int2d (lf-ld+1, cf-cd+1)
{ ligdeb = ld ; ligfin = lf ;
coldeb = cd ; colfin = cf ;
}
int & int2db::operator () (int i, int j // redéfinition de operator ()
{ return int2d::operator () (i-ligdeb, j-coldeb) ;
}
} ;
254
