On ne se préoccupera pas des éventuels problèmes posés par l’affectation ou la
transmission par valeur d’objets du type ens_heter.
N.B. Pour ne pas trop compliquer le programme, on fondera l’égalité de deux
éléments d’un ensemble sur l’égalité de leurs adresses et non pas de leurs valeurs.
Autrement dit, deux éléments de même type et de même valeur pourront appartenir à
un même ensemble, à condition qu’il s’agisse bien de deux objets différents.
Manifestement, la classe ens_heter ne contiendra pas les objets correspondant aux
éléments de l’ensemble, mais seulement des pointeurs sur ces différents éléments. À
moins de fixer le nombre maximal d’éléments a priori, il est nécessaire de conserver
ces pointeurs dans un emplacement alloué dynamiquement par le constructeur ; ce
dernier comportera donc un argument permettant de préciser le nombre maximal
d’éléments requis pour l’ensemble.
Outre l’adresse (adel) de ce tableau de pointeurs, on trouvera en membres donnée :
le nombre maximal d’éléments (nmax) ;
le nombre courant d’éléments (nelem) ;
un entier (courant) qui servira au mécanisme d’itération (il désignera une adresse du
tableau de pointeurs).
En ce qui concerne les fonctions ajoute et appartient, elles devront manifestement
recevoir en argument un objet d’un type dérivé de base. Puisqu’on ne fait aucune
hypothèse a priori sur la nature de tels objets, il est préférable d’éviter une
transmission d’argument par valeur. Par souci de simplicité, nous choisirons une
transmission par référence.
Les mêmes remarques s’appliquent à la valeur de retour de la fonction suivant.
Voici, en définitive, la déclaration de notre classe ens_heter :
/* fichier ensheter.H */
/* déclaration de la classe ens_heter */
class base ;
class ens_heter
{ int nmax ; // nombre maximal d'éléments
int nelem ; // nombre courant d'éléments
base * * adel ; // adresse zone de pointeurs sur les objets éléments
int courant ; // numéro d'élément courant (pour l'itération)
public :
ens_heter (int=20) ; // constructeur
~ens_heter () ; // destructeur
void ajoute (base &) ; // ajout d'un élément
int appartient (base &) ; // appartenance d'un élément
int cardinal () ; // cardinal de l'ensemble
void init () ; // initialisation itération
281
Précédent

- 282/398

Suivant