Exercice 106
Énoncé
Soit une classe vect permettant de manipuler des « vecteurs dynamiques » d’entiers
(c’est-à-dire dont la dimension peut être fixée au moment de l’exécution) dont la
déclaration (fournie dans le fichier vect.h) se présente ainsi :
class vect
{ int nelem ; // nombre d'éléments
int * adr ; // adresse zone dynamique contenant les éléments
public :
vect (int) ; // constructeur (précise la taille du vecteur)
~vect () ; // destructeur
int & operator [] (int) ; // accès à un élément par son "indice"
} ;
On suppose que le constructeur alloue effectivement l’emplacement nécessaire pour
le nombre d’entiers reçu en argument et que l’opérateur [] peut être utilisé
indifféremment dans une expression ou à gauche d’une affectation.
Créer une classe vectb, dérivée de vect, permettant de manipuler des vecteurs
dynamiques, dans lesquels on peut fixer les « bornes » des indices, lesquelles seront
fournies au constructeur de vectb. La classe vect apparaîtra ainsi comme un cas
particulier de vectb (un objet de type vect étant un objet de type vectb dans lequel la
limite inférieure de l’indice est 0).
On ne se préoccupera pas, ici, des problèmes éventuellement posés par la recopie ou
l’affectation d’objets de type vectb.
Nous prévoirons, dans vectb, deux membres donnée supplémentaires (debut et fin) pour
conserver les bornes de l’indice (en toute rigueur, on pourrait se contenter d’un membre
supplémentaire contenant la limite inférieure, sachant que la valeur supérieure pourrait
s’en déduire à partir de la connaissance de la taille du vecteur ; toutefois, cette dernière
information n’étant pas publique, nous rencontrerions des problèmes d’accès !).
Manifestement, vectb nécessite un constructeur à deux arguments entiers correspondant
aux bornes de l’indice ; son en-tête pourrait commencer ainsi :
vectb (int d, int f)
Comme l’appel de ce constructeur entraînera automatiquement celui du constructeur de
vect, il n’est pas question de faire l’allocation dynamique de notre vecteur dans vectb.
252
Énoncé
Soit une classe vect permettant de manipuler des « vecteurs dynamiques » d’entiers
(c’est-à-dire dont la dimension peut être fixée au moment de l’exécution) dont la
déclaration (fournie dans le fichier vect.h) se présente ainsi :
class vect
{ int nelem ; // nombre d'éléments
int * adr ; // adresse zone dynamique contenant les éléments
public :
vect (int) ; // constructeur (précise la taille du vecteur)
~vect () ; // destructeur
int & operator [] (int) ; // accès à un élément par son "indice"
} ;
On suppose que le constructeur alloue effectivement l’emplacement nécessaire pour
le nombre d’entiers reçu en argument et que l’opérateur [] peut être utilisé
indifféremment dans une expression ou à gauche d’une affectation.
Créer une classe vectb, dérivée de vect, permettant de manipuler des vecteurs
dynamiques, dans lesquels on peut fixer les « bornes » des indices, lesquelles seront
fournies au constructeur de vectb. La classe vect apparaîtra ainsi comme un cas
particulier de vectb (un objet de type vect étant un objet de type vectb dans lequel la
limite inférieure de l’indice est 0).
On ne se préoccupera pas, ici, des problèmes éventuellement posés par la recopie ou
l’affectation d’objets de type vectb.
Nous prévoirons, dans vectb, deux membres donnée supplémentaires (debut et fin) pour
conserver les bornes de l’indice (en toute rigueur, on pourrait se contenter d’un membre
supplémentaire contenant la limite inférieure, sachant que la valeur supérieure pourrait
s’en déduire à partir de la connaissance de la taille du vecteur ; toutefois, cette dernière
information n’étant pas publique, nous rencontrerions des problèmes d’accès !).
Manifestement, vectb nécessite un constructeur à deux arguments entiers correspondant
aux bornes de l’indice ; son en-tête pourrait commencer ainsi :
vectb (int d, int f)
Comme l’appel de ce constructeur entraînera automatiquement celui du constructeur de
vect, il n’est pas question de faire l’allocation dynamique de notre vecteur dans vectb.
252
