prédéterminé, comme nous l’avions fait pour les caractères (dans les exercices du
chapitre précédent).
Comme la création d’un objet entraîne ici une allocation dynamique d’un emplacement
mémoire, il est raisonnable de prévoir la libération de cet emplacement lors de la
destruction de l’objet ; cette opération doit donc être prise en charge par le destructeur,
d’où la présence de cette fonction membre.
Voici la définition de notre classe :
#include "setint1.h"
set_int::set_int (int dim)
{ adval = new int [nmax = dim] ; // allocation tableau de valeurs
nelem = 0 ;
}
set_int::~set_int ()
{ delete adval ; // libération tableau de valeurs
}
void set_int::ajoute (int nb)
{ // on examine si nb appartient déjà à l'ensemble
// en utilisant la fonction membre appartient
// s'il n'y appartient pas et si l'ensemble n'est pas plein
// on l'ajoute
if (!appartient (nb) && (nelem }
int set_int::appartient (int nb)
{ int i=0 ;
// on examine si nb appartient déjà à l'ensemble
// (si ce n'est pas le cas, i vaudra nele en fin de boucle)
while ( (i return (i }
int set_int::cardinal ()
{ return nelem ;
}
Notez que, dans la fonction membre ajoute, nous avons utilisé la fonction membre
appartient pour vérifier que le nombre à ajouter ne figurait pas déjà dans notre
ensemble.
Par ailleurs, l’énoncé ne prévoit rien pour le cas où l’on cherche à ajouter un élément à
un ensemble déjà « plein » ; ici, nous nous sommes contenté de ne rien faire dans ce
cas. Dans la pratique, il faudrait soit prévoir un moyen pour que l’utilisateur soit
prévenu de cette situation, soit, mieux, prévoir automatiquement l’agrandissement de la
zone dynamique associée à l’ensemble.
2. Voici le programme d’utilisation demandé :
#include "setint1.h"
#include
using namespace std ;
main()
{ set_int ens ;
cout << "donnez 20 entiers \n" ;
int i, n ;
for (i=0 ; i<20 ; i++)
{ cin >> n ;
ens.ajoute (n) ;
174
Précédent

- 175/398

Suivant