Définir la fonction aff pour qu'elle affiche simplement la valeur entre deux parenthèses.
Définir la fonction dynaff pour qu'elle affiche "binaire:" puis la valeur. La fonction aff appellera simplement dynaff. Le constructeur devra stocker uniquement 0 ou 1 (par exemple, la parité).
Définir la fonction dynaff pour qu'elle affiche "chiffre:" puis la valeur. La fonction aff appellera simplement dynaff. Le constructeur devra stocker uniquement des nombres de 0 à 9.
Définir la fonction dynaff pour qu'elle affiche "hexa:" puis la valeur. La fonction aff appellera simplement dynaff. Le constructeur devra stocker uniquement des nombres de 0 à 15.
Déclarer un tableau de 6 pointeurs de nombre, initialisé avec les adresses des 6 objets précédemment déclarés.
Appeler aff sur chaque objet, puis appeler aff sur chaque élément du tableau, et enfin appeler dynaff sur chaque élément du tableau.
Prévoir les affichages et les comparer avec ceux produits à l'exécution. Bien comprendre les mécanismes mis en jeu dans ces trois cas.
Dans STOCK.H, déclarer la fonction est_limite en virtuelle pure, et ajouter sa déclaration dans StocProd.H et StocPiec.H . Déplacer sa définition dans StocProd.CPP et la définir différemment dans StocPiec.CPP (par exemple, introduire un seuil inversement proportionnel à la valeur de la pièce).
Quelles conséquences pour la classe Stock ?
Les exceptions semblent utiles dans au moins deux domaines : d'une part, dans la gestion des tableaux dynamiques (à la création et à chaque accès) ; d'autre part, dans la gestion de stock (indice supérieur au nombre réel de sortes de produits, rail plein, place restante insuffisante). Toutes les exceptions ne doivent pas obligatoirement être traitées au même niveau : une fonction peut transmettre une exception à sa fonction appelante.
Dans chacun de ces deux domaines, regrouper les différentes exceptions dans une hiérarchie de classes, mémoriser les informations nécessaires afin de fournir des messages d'erreur détaillés, modifier le prototype des fonctions concernées pour préciser les exceptions qu'elles lancent 1, redéfinir les fonctions unexpected() 2 et terminate() pour qu'elles affichent un message avant d'appeler abort() (voir l'aide en ligne sur toutes ces fonctions).
Tester le maximum de cas en ajoutant des erreurs volontaires. Deux solutions sont envisageables :
#if EXCEPTION == 3 if (une_condition) throw( une_exception_definie ); #endifIl suffira alors de définir la constante EXCEPTION=0 pour que le programme retrouve son comportement normal.
1 mettre en commentaire pour MS-Visual C++ 6.0
2 inutile en MS-Visual C++ 6.0