• Aucun résultat trouvé

Programmation par Objets, TD 3: Exceptions

N/A
N/A
Protected

Academic year: 2022

Partager "Programmation par Objets, TD 3: Exceptions"

Copied!
2
0
0

Texte intégral

(1)

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

(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

Références

Documents relatifs

D´ efinition (rang d’un syst` eme ´ echelonn´ e) : Le rang r d’un syst`eme ´echelonn´e `a p ´equations et n inconnues est ´egal au nombre d’´equations qui n’ont pas un

Sauvegarder votre script R : En activant la fenˆ etre qui le contient (celle du haut ` a gauche : le curseur doit clignoter en noir) puis en allant de nouveau dans la barre de menu

Nous allons utiliser maintenant une foncitionnalit´ e avanc´ ee de suricata qui permet de d´ efinir le comportement d’une r` egle par le biais de l’ex´ ecution d’un script lua..

Le processus p`ere et le processus fils doivent chacun ´ecrire dans un meme fichier cinq message successifs de la forme:1. ”message numero xxx du processus p`ere de

Pour donner une d´ efinition, il n’est pas n´ ecessaire de donner une valeur, il suffit de donner une propri´ et´ e caract´ eristique..

[r]

Pour chacune des valeurs propres, d´ eterminer un vecteur propre associ´ e.. b) D´ eterminer une matrice P et une matrice diagonale D telles que C = P

[r]