Exécuter le code suivant et observer les messages en fonction des arguments.
#include<iostream> double divide(double a, double b); void test_divide(); double divide(double a, double b) { try { if(!b) throw b; } catch (double b) { std::cout << "Ne peut pas diviser par zero.\n"; return b; } return a/b; } void test_divide() { double i, j; for(;;) { std::cout << "Le numerateur (0 pour arreter): "; std::cin >> i; if(i == 0) break; std::cout << " Le denominateur : "; std::cin >> j; std::cout << "Resultat: " << divide(i,j) << std::endl; } } int main() { test_divide() ; }
Expliquer ce qui se passe.
Nous envisageons désormais faire les choses correctement. Nous souhaitons définir une classe exception qui dérive de la classe ''std::logic_error''.
Cette classe devra s’appeler division_by_zero
.
Créer la classe division_by_zero
. Elle pourra être définie dans un fichier d’entête math.hpp
qui contiendra aussi l’entête de la fonction divide
. Le fichier associé math.cpp
contiendre la code de la fonction divide.
Penser à fournir un message d’erreur cohérent.
Modifier les fonctions divide et test_divide pour prendre ne plus lancer et capturer une exception de type double mais de type division_by_zero
.