- Q1:Soit la classe Essai ayant les membres publics suivants:
[Solutionnaire](1169demo04exo1q1sol.h).
[Solutionnaire](1169demo04exo1q1sol.cpp).
[Solutionnaire](1169demo04exo1q2sol.h).
[Solutionnaire](1169demo04exo1q2sol.cpp).
- classe Erreur
- constructeur & destructeur de la classe Essai
- une fonction f qui lève une exception lors de la construction d'une instance de la classe Erreur initialisée à la valeur 100.
- Écrire la fonction main contenant, la structure de contrôle try/catch. dans try, il y a appel de la fonction f, et catch intercepte l'exception du type Erreur, et un objet e est passé en paramètres afin d'être utilisé pour extraire la valeur de l'erreur.
- Complétez ce programme par la définition des fonctions terminate & unexpected.
- Récrire une partie de votre programme pour que la fonction unexpected soit appelée.
- Q2 Expliquer le fonctionnement du programme suivant
(1169demo04exo2.cpp).
[Solutionnaire](1169demo04exo2sol.cpp).
- Q3Le segment de code suivant contient une fuite de mémoire!
En effet si une exception est levée, l'instruction "delete ptr" ne sera jamais exécutée. Corriger le segment
de programme pour permettre de libérer l'espace mémoire alloué dans tous les cas (exception levée ou pas).
try {
Test *ptr = new Test;
// en cas d'erreur leve l'exception TestError
cout << ptr->unefonction() << endl;
....
delete ptr;
}
catch(const TestError &err){
err.affichage();
return 1;
}
[Solutionnaire]
try {
Test *ptr = new Test;
try {
// En cas d'erreur leve l'exception TestError
cout << ptr->unefonction() << endl;
....
}
catch(...) {
delete ptr;
throw;
}
delete ptr;
}
catch(const TestError &err){
err.affichage();
return 1;
}
Q4: Par de simples opérations mathématiques sur des entiers
non signés (unsigned int), vous allez définir les outils nécessaires pour lever les exception: overflow et underflow.
[Solutionnaire](1169demo04exo4sol.cpp).
Ces exceptions vont agir sur les 3 fonctions mathématiques suivantes:
- add: additionne deux entiers non signés passés en argument (i.e. a+b), et retourne le résultat de
l'opération. Cette fonction peut lever que l'exception du type overflow si le résultat de l'opération
d'addition est inférieur au premier argument (i.e. a) ou bien au second argument (i.e. b).
- sous: soustrait deux entiers non signés passés en argument (i.e. a-b), et retourne le résultat de
l'opération. Cette fonction peut lever que l'exception du type underflow si le résultat de l'opération
d'addition est supérieur au premier argument (i.e. a).
- calc: calcul une simple opération mathématique (i.e. a+(b-c)) en utilisant 3 entiers non signés
passés en argument, et retourne le résultat. Cette opération mathématique est calculée en utilisant
pour cela les fonctions préalablement citées (add et sous). Cette fonction lèvera les deux types
d'exception précédemment définies: overflow et underflow.
Chaque exception sera représentée par une structure, ayant les deux membres suivants:
fonctmath: nom de la fonction mathématique qui a levé l'exception (ex. add, sous, ou calc).
msgexp: message signalant que l'exception (son nom) a été levée par la fonction mathématique (son
nom), ex.: "overflow dans add", "underflow dans sous".
Vote tache consiste à définir l'ensemble des fonctions et des structures précédemment décrites et complétez
la fonction main suivante:
(1169demo04exo4.cpp).
|
[top]
|