Exercice 88
Énoncé
Considérer à nouveau la classe set_int créée dans l’exercice 77 (et sur laquelle est
également fondé l’exercice précédent) :
class set_int
{ int * adval ; // adresse du tableau des valeurs
int nmax ; // nombre maxi d'éléments
int nelem ; // nombre courant d'éléments
public :
set_int (int = 20) ; // constructeur
~set_int () ; // destructeur
......
} ;
Adapter cette classe, de manière que :
• l’on puisse ajouter un élément à un ensemble de type set_int par (e désignant un
objet de type set_int et n un entier) : e < n ;
• e[n] prenne la valeur 1 si n appartient à e et la valeur 0 dans le cas contraire. On
s’arrangera pour qu’une instruction de la forme e[i] = ... soit rejetée à la
compilation.
Il nous faut donc surdéfinir l’opérateur binaire <, de façon qu’il reçoive comme
opérandes un objet de type set_int et un entier. Bien que l’énoncé ne prévoie rien, il est
probable que l’on souhaitera pouvoir écrire des choses telles que (e étant de type
set_int, n et p des entiers) :
e < n < p ;
Cela signifie donc que notre opérateur devra fournir comme valeur de retour
l’ensemble concerné, après qu’on lui aura ajouté l’élément voulu.
Nous pouvons ici utiliser indifféremment une fonction membre ou une fonction amie.
Nous choisirons la première possibilité. Par ailleurs, nous transmettrons les opérandes
et la valeur de retour par référence (c’est possible ici car l’objet correspondant n’est
pas créé au sein de l’opérateur même, c’est-à-dire qu’il n’est pas de classe
automatique) ; ainsi, notre opérateur fonctionnera même si le constructeur par recopie
n’a pas été surdéfini (en pratique toutefois, il faudra le faire dès qu’on souhaitera
pouvoir transmettre la valeur d’un objet de type set_int en argument).
208
Énoncé
Considérer à nouveau la classe set_int créée dans l’exercice 77 (et sur laquelle est
également fondé l’exercice précédent) :
class set_int
{ int * adval ; // adresse du tableau des valeurs
int nmax ; // nombre maxi d'éléments
int nelem ; // nombre courant d'éléments
public :
set_int (int = 20) ; // constructeur
~set_int () ; // destructeur
......
} ;
Adapter cette classe, de manière que :
• l’on puisse ajouter un élément à un ensemble de type set_int par (e désignant un
objet de type set_int et n un entier) : e < n ;
• e[n] prenne la valeur 1 si n appartient à e et la valeur 0 dans le cas contraire. On
s’arrangera pour qu’une instruction de la forme e[i] = ... soit rejetée à la
compilation.
Il nous faut donc surdéfinir l’opérateur binaire <, de façon qu’il reçoive comme
opérandes un objet de type set_int et un entier. Bien que l’énoncé ne prévoie rien, il est
probable que l’on souhaitera pouvoir écrire des choses telles que (e étant de type
set_int, n et p des entiers) :
e < n < p ;
Cela signifie donc que notre opérateur devra fournir comme valeur de retour
l’ensemble concerné, après qu’on lui aura ajouté l’élément voulu.
Nous pouvons ici utiliser indifféremment une fonction membre ou une fonction amie.
Nous choisirons la première possibilité. Par ailleurs, nous transmettrons les opérandes
et la valeur de retour par référence (c’est possible ici car l’objet correspondant n’est
pas créé au sein de l’opérateur même, c’est-à-dire qu’il n’est pas de classe
automatique) ; ainsi, notre opérateur fonctionnera même si le constructeur par recopie
n’a pas été surdéfini (en pratique toutefois, il faudra le faire dès qu’on souhaitera
pouvoir transmettre la valeur d’un objet de type set_int en argument).
208
