Exercice 144
Énoncé
Réaliser une classe nommée bit_array permettant de manipuler des tableaux de bits
(autrement dit, des tableaux dans lesquels chaque élément ne peut prendre que l’une
des deux valeurs 0 ou 1). La taille d’un tableau (c’est-à-dire le nombre de bits) sera
définie lors de sa création (par un argument passé à son constructeur). On prévoira
les opérateurs suivants :
• +=, tel que t+=n mette à 1 le bit de rang n du tableau t ;
• -=, tel que t-=n mette à 0 le bit de rang n du tableau t ;
• [], tel que l'expression t[i] fournisse la valeur du bit de rang i du tableau t (on
ne prévoira pas, ici, de pouvoir employer cet opérateur à gauche d'une
affectation, comme dans t[i] = ...) ;
• ++, tel que t++ mette à 1 tous les bits de t ;
• --, tel que t--mette à 0 tous les bits de t ;
• <<, tel que flot << t envoie le contenu de t sur le flot indiqué, sous la forme :
<* bit1, bit2, ... bitn *>
On fera en sorte que l’affectation et la transmission par valeur d’objets du type
bit_array ne pose aucun problème.
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.
Si l’on cherche à minimiser l’emplacement mémoire utilisé pour les objets de type bit_
array, il est nécessaire de n’employer qu’un seul bit pour représenter un « élément »
d’un tableau. Ces bits devront donc être regroupés, par exemple à raison de CHAR_BIT
(défini dans limits.h) bits par caractère.
Manifestement, il faut prévoir que l’emplacement destiné à ces différents bits soit
alloué dynamiquement en fonction de la valeur fournie au constructeur : pour n bits, il
faudra n/CHAR_BIT+1 caractères.
En membres donnée, il nous suffit de disposer d’un pointeur sur l’emplacement
355
Précédent

- 356/398

Suivant