Exercice 108
Énoncé
Soit une classe vect permettant de manipuler des « vecteurs dynamiques » d’entiers,
dont la déclaration (fournie dans un fichier vect.h) se présente ainsi (notez la
présence de membres protégés) :
class vect
{ protected : // en prévision d'une éventuelle classe dérivée
int nelem ; // nombre d'éléments
int * adr ; // adresse zone dynamique contenant les éléments
public :
vect (int) ; // constructeur
~vect () ; // destructeur
int & operator [] (int) ; // accès à un élément par son "indice"
} ;
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. En revanche, comme on peut le voir, cette classe n’a pas prévu de
constructeur par recopie et elle n’a pas surdéfini l’opérateur d’affectation.
L’affectation et la transmission par valeur d’objets de type vect posent donc les
« problèmes habituels ».
Créer une classe vectok, dérivée de vect, telle que l’affectation et la transmission par
valeur d’objets de type vectok s’y déroulent convenablement. Pour faciliter
l’utilisation de cette nouvelle classe, introduire une fonction membre taille
fournissant la dimension d’un vecteur.
Écrire un petit programme d’essai.
Manifestement, la classe vectok n’a pas besoin de définir de nouveaux membres donnée.
Pour déclarer des objets de type vectok, il faudra pouvoir en préciser la dimension, ce
qui signifie que vectok devra absolument disposer d’un constructeur approprié. Ce
dernier se contentera toutefois de retransmettre la valeur reçue en argument au
constructeur de vect ; il aura donc un corps vide. Notez qu’il n’est pas nécessaire de
prévoir un destructeur (car celui de vect sera appelé en cas de destruction d’un objet de
type vectok et il n’y a rien de plus à faire).
Notez que pour gérer convenablement la recopie ou l’affectation d’objets, nous nous
contenterons de la méthode déjà rencontrée qui consiste à dupliquer les objets
256
Énoncé
Soit une classe vect permettant de manipuler des « vecteurs dynamiques » d’entiers,
dont la déclaration (fournie dans un fichier vect.h) se présente ainsi (notez la
présence de membres protégés) :
class vect
{ protected : // en prévision d'une éventuelle classe dérivée
int nelem ; // nombre d'éléments
int * adr ; // adresse zone dynamique contenant les éléments
public :
vect (int) ; // constructeur
~vect () ; // destructeur
int & operator [] (int) ; // accès à un élément par son "indice"
} ;
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. En revanche, comme on peut le voir, cette classe n’a pas prévu de
constructeur par recopie et elle n’a pas surdéfini l’opérateur d’affectation.
L’affectation et la transmission par valeur d’objets de type vect posent donc les
« problèmes habituels ».
Créer une classe vectok, dérivée de vect, telle que l’affectation et la transmission par
valeur d’objets de type vectok s’y déroulent convenablement. Pour faciliter
l’utilisation de cette nouvelle classe, introduire une fonction membre taille
fournissant la dimension d’un vecteur.
Écrire un petit programme d’essai.
Manifestement, la classe vectok n’a pas besoin de définir de nouveaux membres donnée.
Pour déclarer des objets de type vectok, il faudra pouvoir en préciser la dimension, ce
qui signifie que vectok devra absolument disposer d’un constructeur approprié. Ce
dernier se contentera toutefois de retransmettre la valeur reçue en argument au
constructeur de vect ; il aura donc un corps vide. Notez qu’il n’est pas nécessaire de
prévoir un destructeur (car celui de vect sera appelé en cas de destruction d’un objet de
type vectok et il n’y a rien de plus à faire).
Notez que pour gérer convenablement la recopie ou l’affectation d’objets, nous nous
contenterons de la méthode déjà rencontrée qui consiste à dupliquer les objets
256
