TP #3 de C++ ISIMA 2ème année : Forme
canonique de Coplien, Redéfinition d'opérateurs et exceptions
minimales
1. Exercice #1 : La classe vecteur simple
Le but de ce TP est de mettre en place la forme canonique de Coplien sur
une classe nommée Vecteur et modélisant un tableau
d'entiers. Trois attributs seront créés :
- Un pointeur sur des entiers pour le stockage des nombres
- Un entier nommé capacité et traduisant la
capacité de stockage physique du vecteur
- Un entier nommé taille et traduisant le niveau de
remplissage du vecteur, c'est à dire l'indice du dernier
élément utilisé. A l'initialisation du vecteur (hors
constructeur de recopie), taille est à zéro.
1.1 Implémentation de la forme canonique de Coplien
Rappelons que la forme canonique de Coplien nécessite les
éléments suivants :
- Constructeur par défaut
- Celui-ci sera en fait un constructeur prenant la capacité du
vecteur en paramètre avec une valeur par défaut.
- Constructeur de recopie
- Opérateur d'affectation
- On pourra coder dans une méthode séparée
(réfléchir sur son accessibilité) la partie commune
à ces deux méthodes
- Destructeur
1.2 Autres méthodes
1.2.1 Accès aux éléments du tableau
Une seule méthode est proposée pour accéder en
écriture aux éléments du vecteur :
- void push_back(int)
- rajoute un élément dans le tableau après le
dernier utilisé. L'exception "Depassement de capacité" sera
levée si la capacité maximale est atteinte
Pour l'accès en lecture aux éléments du vecteur,
seul l'opérateur [] sera proposé en version constante. Tout
accès au delà de la taille (et donc, a fortiori, au dela de la
capacité) déclenchera l'exception "En dehors des bornes".
1.2.2 Autre opération
Finalement, on proposera la redéfinition de l'opérateur de
sortie sur flux (<<). Vous proposerez deux implémentations :
- L'une utilisant le mot clef friend
- L'autre, l'opérateur []
Afin de les distinguer, vous utilisez des directives de compilation
conditionnelle (#ifdef).
Solution
1.3 Pour aller plus loin dans l'exercice
- Comparez les performances des deux versions de l'opérateur
(<<) à l'aide de mesures temporelles
- Proposez un système d'affectation et de recopie n'effectuant
le recopie effective des blocs de mémoire que dans le cas où il y
a accès en écriture