Implanter le code suivant dans un nouveau projet.
#include <iostream> double divide(double a, double b); void test_divide(); 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; } } 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 main() { test_divide() ; }
Procéder à une exécution et regarder ce qui se passe quand une division par 0 se produit.
Exécuter en mode débogage et placer un point d’arrêt sur le code de capture de l’exception.
Nous envisageons désormais faire les choses correctement. Nous souhaitons définir une classe exception qui dérive de la classe std::exception se trouvant définie dans le fichier d'entête <exception>. Plus spécifiquement, nous souhaitons la faire dériver de la classe std::runtime_error qui elle-même dérive de std::exception.
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
.