Au contraire, nous réutilisons le travail effectué par vect, auquel nous transmettrons
simplement le nombre d’éléments souhaités, c’est-à-dire ici f - d + 1. Voici l’en-tête
complet du constructeur de vectb :
vectb (int d, int f) : vect (f-d+1)
La tâche spécifique de vectb se limitera à renseigner les valeurs des membres donnée
debut et fin.
Aucun destructeur n’est nécessaire pour vectb, dans la mesure où son constructeur
n’alloue aucun autre emplacement dynamique que celui alloué par vect.
En ce qui concerne l’opérateur [], on peut penser que vectb l’hérite de vect et que, par
conséquent, il n’est pas nécessaire de le surdéfinir. Toutefois, la notation t[i] ne
désigne plus forcément l’élément de rang i d’un objet de type vectb. Or, manifestement,
on souhaitera qu’il en aille toujours ainsi. Il faut donc redéfinir [] pour vectb, quitte
d’ailleurs à réutiliser l’opérateur défini dans vect.
Voici ce que pourrait être notre classe vectb (ici, on ne trouve qu’une définition, puisque
les deux fonctions membre ont été définies en ligne) :
#include "vect.h"
class vectb : public vect
{ int debut, fin ;
public :
vectb ( int d, int f) : vect (f-d+1)
{ debut = d ; fin = f ;
}
int & operator [] (int i)
{ return vect::operator [] (i-debut) ;
}
} ;
1. Si le membre donnée adr avait été déclaré protégé (protected) dans la classe vect, nous
aurions pu redéfinir l’opérateur [] de vectb, sans faire appel à celui de vect :
int & operator [] (int i)
{ return adr[i-debut] ;
}
2. Aucune protection d’indices n’est à prévoir dans vectb, dès lors qu’elle a déjà été
prévue dans vect.
253
Précédent

- 254/398

Suivant