Exercice 142
Énoncé
Réaliser une classe nommée set_int permettant de manipuler des ensembles de
nombres entiers. Le nombre maximal d’entiers que pourra contenir l’ensemble sera
précisé au constructeur qui allouera dynamiquement l’espace nécessaire. On
prévoira les opérateurs suivants (e désigne un élément de type set_int et n un entier :
• <<, tel que e< • %, tel que n % e vale 1 si n appartient à e et 0 sinonþ;
• <<, tel que flot << e envoie le contenu de l’ensemble e sur le flot indiqué, sous la
forme :
[entier1, entier2, ... entiern]
La fonction membre cardinal fournira le nombre d’éléments de l’ensemble. Enfin, on
s’arrangera pour que l’affectation ou la transmission par valeur d’objets de type
set_int ne pose aucun problème (on acceptera la duplication complète d’objets).
N.B. Le chapitre 21 vous montrera comment résoudre cet exercice à l’aide des
composants standard introduits par la norme, qu’il ne faut pas chercher à utiliser ici.
Naturellement, notre classe comportera, en membres donnée, le nombre maximal (nmax)
d’éléments de l’ensemble, le nombre courant d’éléments (nelem) et un pointeur sur
l’emplacement contenant les valeurs de l’ensemble.
Comme notre classe comporte une partie dynamique, il est nécessaire, pour que
l’affectation et la transmission par valeur se déroulent convenablement, de surdéfinir
l’opérateur d’affectation et de munir notre classe d’un constructeur par recopie. Les
deux fonctions membre (operator = et set_int ) devront prévoir une « copie profonde »
des objets. Nous utiliserons pour cela une méthode que nous avons déjà rencontrée et
qui consiste à considérer que deux objets différents disposent systématiquement de
deux parties dynamiques différentes, même si elles possèdent le même contenu.
L’opérateur % doit être surdéfini obligatoirement sous la forme d’une fonction amie,
puisque son premier opérande n’est pas de type classe. L’opérateur de sortie dans un
flot doit, lui aussi, être surdéfini sous la forme d’une fonction amie, mais pour une
347
Précédent

- 348/398

Suivant