{
noeud * debut ; // pointeur sur le début de la liste
int nelem ; // nombre courant d'éléments
public :
set_int (int = 20) ; // constructeur (argument inutile ici)
set_int (set_int &) ; // constructeur par recopie
~set_int () ; // destructeur
void ajoute (int) ; // ajout d'un élément
int appartient (int) ; // appartenance d'un élément
int cardinal () ; // cardinal de l'ensemble
} ;
La définition du nouveau constructeur ne présente pas de difficulté. La fonction membre
ajoute réalise une classique insertion d’un noeud en début de liste et incrémente le
nombre d’éléments de l’ensemble. La fonction appartient effectue une exploration de
liste tant qu’elle n’a pas trouvé la valeur concernée ou atteint la fin de la liste. En
revanche, le nouveau constructeur par recopie doit recopier la liste chaînée. Il réalise à
la fois une exploration de la liste d’origine et une insertion dans la liste copiée. Quant
au destructeur, il doit maintenant libérer systématiquement tous les emplacements des
différents nœuds créés pour la liste.
Voici la nouvelle définition de notre classe :
#include // pour NULL
#include "setint3.h"
set_int::set_int (int dim) // dim est conservé pour la compatibilité
// avec l'ancienne classe
{ debut = NULL ;
nelem = 0 ;
}
set_int::set_int (set_int & e) // ou : set_int::set_int (const set_int & e)
{ nelem = e.nelem ;
// création d'une nouvelle liste identique à l'ancienne
noeud * adsource = e.debut ;
noeud * adbut ;
debut = NULL ;
while (adsource)
{ adbut = new noeud ; // création nouveau nœud
adbut->valeur = adsource->valeur ; // copie valeur
adbut->suivant = debut ; // insertion nouveau nœud
debut = adbut ; // dans nouvelle liste
adsource = adsource->suivant ; // nœud suivant ancienne liste
}
}
set_int::~set_int ()
{ noeud * adn ;
noeud * courant = debut ;
while (courant)
{ adn = courant ; // libération de tous
courant = courant->suivant ; // les nœuds
delete adn ; // de la liste
}
}
void set_int::ajoute (int nb)
{ if (!appartient (nb) ) // si nb n'appartient pas à la liste
{ noeud * adn = new noeud ; // on l'ajoute en début de liste
adn->valeur = nb ;
adn->suivant = debut ;
debut = adn ;
178
Précédent

- 179/398

Suivant