====== Les exceptions en C++ ====== ==== Question n°1 : Lancer & capturer un exception ==== Exécuter le code suivant et observer les messages en fonction des arguments. #include 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. ==== Question n°2 : Création d'une classe d'exception ==== Nous envisageons désormais faire les choses correctement. Nous souhaitons définir une classe exception qui dérive de la classe [[https://en.cppreference.com/w/cpp/error/logic_error|''std::logic_error'']]. Cette classe devra s’appeler ''division_by_zero''. === Question n°2.1 === 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. === Question n°2.2 === 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''.   ==== Liens vers les éléments syntaxiques C++ ==== [[cpp:syntax:exceptions|Les exceptions en C++]] ===== Navigation ===== [[.:part_ii|Deuxième partie]]