Exercice 143
Énoncé
Créer une classe vect permettant de manipuler des « vecteurs dynamiques » d’entiers,
c’est-à-dire des tableaux d’entiers dont la dimension peut être définie au moment de
leur création (une telle classe a déjà été partiellement réalisée dans l’exercice 39).
Cette classe devra disposer des opérateurs suivants :
• [] pour l’accès à une des composantes du vecteur, et cela aussi bien au sein
d’une expression qu’à gauche d’une affectation (mais cette dernière situation
ne devra pas être autorisée sur des « vecteurs constants ») ;
• ==, tel que si v1 et v2 sont deux objets de type vect, v1==v2 prenne la valeur 1 si v1
et v2 sont de même dimension et ont les mêmes composantes et la valeur 0 dans
le cas contraire ;
• <<, tel que flot<
De plus, on s’arrangera pour que l’affectation et la transmission par valeur d’objets
de type vect ne pose aucun problème ; pour ce faire, on acceptera de dupliquer
complètement les objets concernés.
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.
Rappelons que lorsqu’on définit des objets constants, il n’est pas possible de leur
appliquer une fonction membre publique, sauf si cette dernière a été déclarée avec le
qualificatif const (auquel cas une telle fonction peut indifféremment être utilisée avec
des objets constants ou non constants). Pour obtenir l’effet demandé de l’opérateur [],
lorsqu’il est appliqué à un vecteur constant, il est nécessaire d’en prévoir deux
définitions dont l’une s’applique aux vecteurs constants ; pour éviter qu’on ne puisse,
dans ce cas, l’utiliser à gauche d’une affectation, il est nécessaire qu’elle renvoie son
résultat par valeur (et non par adresse comme le fera la fonction applicable aux
vecteurs non constants).
Voici la déclaration de notre classe :
#include
352
Énoncé
Créer une classe vect permettant de manipuler des « vecteurs dynamiques » d’entiers,
c’est-à-dire des tableaux d’entiers dont la dimension peut être définie au moment de
leur création (une telle classe a déjà été partiellement réalisée dans l’exercice 39).
Cette classe devra disposer des opérateurs suivants :
• [] pour l’accès à une des composantes du vecteur, et cela aussi bien au sein
d’une expression qu’à gauche d’une affectation (mais cette dernière situation
ne devra pas être autorisée sur des « vecteurs constants ») ;
• ==, tel que si v1 et v2 sont deux objets de type vect, v1==v2 prenne la valeur 1 si v1
et v2 sont de même dimension et ont les mêmes composantes et la valeur 0 dans
le cas contraire ;
• <<, tel que flot<
De plus, on s’arrangera pour que l’affectation et la transmission par valeur d’objets
de type vect ne pose aucun problème ; pour ce faire, on acceptera de dupliquer
complètement les objets concernés.
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.
Rappelons que lorsqu’on définit des objets constants, il n’est pas possible de leur
appliquer une fonction membre publique, sauf si cette dernière a été déclarée avec le
qualificatif const (auquel cas une telle fonction peut indifféremment être utilisée avec
des objets constants ou non constants). Pour obtenir l’effet demandé de l’opérateur [],
lorsqu’il est appliqué à un vecteur constant, il est nécessaire d’en prévoir deux
définitions dont l’une s’applique aux vecteurs constants ; pour éviter qu’on ne puisse,
dans ce cas, l’utiliser à gauche d’une affectation, il est nécessaire qu’elle renvoie son
résultat par valeur (et non par adresse comme le fera la fonction applicable aux
vecteurs non constants).
Voici la déclaration de notre classe :
#include
352
