Exercice 93
É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.
N. B. Le chapitre 17 vous montrera comment résoudre le présent exercice à l’aide
des composants standard introduits par la norme, qu'il ne faut pas chercher à utiliser
ici.
La classe stack_int contiendra comme membres donnée : la taille de l’emplacement
réservé pour la pile (nmax), le nombre d’éléments placés à un moment donné sur la pile
(nelem) et un pointeur sur l’emplacement qui sera alloué par le constructeur pour y
ranger les éléments de la pile (adv). Notez qu’il n’est pas nécessaire de prévoir une
donnée supplémentaire pour un éventuel « pointeur » de pile, dans la mesure où c’est le
nombre d’éléments nelem qui joue ici ce rôle.
Les opérateurs requis peuvent indifféremment être définis comme fonctions membre ou
comme fonctions amies. Nous choisirons ici la première solution. Pour que les
220
É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<
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.
N. B. Le chapitre 17 vous montrera comment résoudre le présent exercice à l’aide
des composants standard introduits par la norme, qu'il ne faut pas chercher à utiliser
ici.
La classe stack_int contiendra comme membres donnée : la taille de l’emplacement
réservé pour la pile (nmax), le nombre d’éléments placés à un moment donné sur la pile
(nelem) et un pointeur sur l’emplacement qui sera alloué par le constructeur pour y
ranger les éléments de la pile (adv). Notez qu’il n’est pas nécessaire de prévoir une
donnée supplémentaire pour un éventuel « pointeur » de pile, dans la mesure où c’est le
nombre d’éléments nelem qui joue ici ce rôle.
Les opérateurs requis peuvent indifféremment être définis comme fonctions membre ou
comme fonctions amies. Nous choisirons ici la première solution. Pour que les
220
