Exercice 155 (93 revisité)
Ancien énoncé
Réaliser une classe nommée stack_int permettant de gérer une pile d’entiers. Ces
derniers seront conservés dans un emplacement alloué dynamiquement ; sa
dimension sera déterminée par l’argument fourni à son constructeur (on lui prévoira
une valeur par défaut de 20). Cette classe devra comporter les opérateurs suivants
(nous supposons que p est un objet de type stack_int et n un entier) :
• <<, tel que p<
passe) ;
• >>, tel que p>>n place dans n la valeur du haut de la pile p, en la supprimant de la
pile (si la pile est vide, la valeur de n ne sera pas modifiée) ;
• ++, tel que p++ vale 1 si la pile p est pleine et 0 dans le cas contraire ;
• --, tel que p-- vale 1 si la pile p est vide et 0 dans le cas contraire.
On prévoira que les opérateurs << et >> pourront être utilisés sous les formes
suivantes (n1, n2 et n3 étant des entiers) :
p << n1 << n2 << n3 ; p >> n1 >> n2 << n3 ;
On fera en sorte qu’il soit possible de transmettre une pile par valeur. En revanche,
l’affectation entre piles ne sera pas permise, et on s’arrangera pour que cette
situation aboutisse à un arrêt de l’exécution.
Commentaires
Si l’on ne s’intéresse qu’aux seules fonctionnalités (ajout, extraction, suppression, test
pile pleine ou pile vide) de la classe qu’on demande de créer, il existe un composant
qui fait l’affaire. Il s’agit de stack>. Ici, on s’attendrait plus simplement à
stack. En fait, le patron stack est non pas un conteneur à part entière, mais ce que
l’on appelle un adaptateur de conteneur. Il s’agit d’un patron de classes, fondé sur un
conteneur d’un type donné (ici vector) qui en modifie l’interface, à la fois en la
restreignant et en l’adaptant à des fonctionnalités données, à savoir ici :
test pile vide (fonction empty) ;
accès à l’information située au somment de la pile (fonction top) : cette fonction ne
385
Ancien énoncé
Réaliser une classe nommée stack_int permettant de gérer une pile d’entiers. Ces
derniers seront conservés dans un emplacement alloué dynamiquement ; sa
dimension sera déterminée par l’argument fourni à son constructeur (on lui prévoira
une valeur par défaut de 20). Cette classe devra comporter les opérateurs suivants
(nous supposons que p est un objet de type stack_int et n un entier) :
• <<, tel que p<
• >>, tel que p>>n place dans n la valeur du haut de la pile p, en la supprimant de la
pile (si la pile est vide, la valeur de n ne sera pas modifiée) ;
• ++, tel que p++ vale 1 si la pile p est pleine et 0 dans le cas contraire ;
• --, tel que p-- vale 1 si la pile p est vide et 0 dans le cas contraire.
On prévoira que les opérateurs << et >> pourront être utilisés sous les formes
suivantes (n1, n2 et n3 étant des entiers) :
p << n1 << n2 << n3 ; p >> n1 >> n2 << n3 ;
On fera en sorte qu’il soit possible de transmettre une pile par valeur. En revanche,
l’affectation entre piles ne sera pas permise, et on s’arrangera pour que cette
situation aboutisse à un arrêt de l’exécution.
Commentaires
Si l’on ne s’intéresse qu’aux seules fonctionnalités (ajout, extraction, suppression, test
pile pleine ou pile vide) de la classe qu’on demande de créer, il existe un composant
qui fait l’affaire. Il s’agit de stack
stack
l’on appelle un adaptateur de conteneur. Il s’agit d’un patron de classes, fondé sur un
conteneur d’un type donné (ici vector
restreignant et en l’adaptant à des fonctionnalités données, à savoir ici :
test pile vide (fonction empty) ;
accès à l’information située au somment de la pile (fonction top) : cette fonction ne
385
