Programmation par Objets, TD 3: Exceptions
Exercice 1. ´Ex´ecution de code Que fournit l’ex´ecution du code suivant :
# i n c l u d e < i o s t r ea m >
c l a s s E r r e u r { p u b l i c:
int num; };
c l a s s E r r e u r _ d : p u b l i c E r r e u r { p u b l i c:
int c o d e;
};
c l a s s A { p u b l i c:
A(int n) { if (n= = 1 ) { E r r e u r _ d e;
e.num = 9 9 9 ; e.c o d e = 12;
t h r o w e ; }
} };
int m a i n() { try{
A a(1) ;
std::c o u t < < " a p r e s c r e a t i o n a (1) " < < std::e n d l; }
c a t c h (c o n s t E r r e u r& e) {
std::c o u t < < " ** e x c e p t i o n E r r e u r " < < e.num < < std::e n d l;;
}
std::c o u t < < " s u i t e m a i n "< <std::e n d l;
try{
A b(1) ;
std::c o u t < < " a p r e s c r e a t i o n b (1) " < < std::e n d l; }
c a t c h (c o n s t E r r e u r _ d& e) {
std::c o u t < < " ** e x c e p t i o n E r r e u r _ d " < < e.num
< < " " < < e.c o d e < < std::e n d l; }
c a t c h (c o n s t E r r e u r& e) {
std::c o u t < < " ** e x c e p t i o n E r r e u r " < < e.num < < std::e n d l;;
}
}
a. Quels r´esultats fournit ce programme ?
b. Que se passe-t-il
1. si l’on permute l’ordre des deux gestionnaires dans le second bloc try ?
2. si on remplace le throws Erreur_d, Erreur parthrows Erreur_ddans le constructeur deA?
L3 Maths/info – TD de programmation par objets en C++ – Cl´ement Pernet Page 1/2
Exercice 2. Exception et polymorphisme
On souhaite impl´ementer trois exceptions susceptibles d’arriver lors de calculs avec des int:
— DivParZero: lorsque l’on calcule a/bo`ub=0,
— RacineDeNegatif : lev´ee lorsqu’on demande la racine carr´ee d’un nombre n´egatif,
— IntOverflow: l´ev´ee lorsqu’on effectue une op´eration arithm´etique sur des int dont le r´esultat d´eborde la capacit´e du typeint.
Il faut en particulier que chacune de ces exceptions disposent d’une m´ethode print_why() qui affiche un message d´etaill´e de la forme :
D i v i s i o n par 0 d a n s le c a l c u l de 42 / 0
C a l c u l i m p o s s i b l e de la r a c i n e c a r r´ee du n o m b r e n´eg a t i f -1515
D´eb o r d e m e n t de c a p a c i t´e du t y p e int d a n s le c a l c u l de 2 1 4 7 4 8 3 6 4 0 + 19
a. proposer une impl´ementation de ces exceptions, reposant sur une hi´erarchie de classe, afin de permettre d’attraper toutes ces exceptions par un seul bloc catch.
b. Grace `a un syst`eme de r´ed´efinition dynamique, assurez-vous que le message le plus pr´ecis possible puisse ˆetre affich´e mˆeme quand un seul bloc catchattrape ces exceptions
L3 Maths/info – TD de programmation par objets en C++ – Cl´ement Pernet Page 2/2