Exercice 158 (94 revisité)
Ancien é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.
Commentaires
Si l’on ne s’intéresse qu’aux seules fonctionnalités de la classe qu’on demande d’écrire
et que l’on fait abstraction de l’opérateur de sortie sur un flot, le composant standard
vector fera l’affaire. On notera cependant qu’alors, l’opérateur [] pourra être
employé à gauche d’une affectation.
Si l’on tient absolument à ce que ces fonctionnalités soient mises en œuvre par
l’intermédiaire des opérateurs proposés, on peut quand même s’appuyer sur les
fonctionnalités de la classe vector en créant une classe dérivée qu’on adapte de
façon appropriée. Voici ce que pourrait être la définition d’une telle classe, nommée
bit_array, accompagnée du même exemple d’utilisation que dans l’exercice 94 :
#include
394
Précédent

- 395/398

Suivant