User Tools

Site Tools


in202:seance_4a:td_4a:part_i

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
in202:seance_4a:td_4a:part_i [2021/04/11 13:33]
bmonsuez created
in202:seance_4a:td_4a:part_i [2022/11/18 10:46] (current)
Line 1: Line 1:
 ====== Les exceptions en C++ ====== ====== Les exceptions en C++ ======
 +
 +==== Question n°1 : Lancer & capturer un exception ==== 
 +
 +Exécuter le code suivant et observer les messages en fonction
 +des arguments.
 +
 +<code cpp>
 +
 +#​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() ;
 +}
 +</​code>​
 +
 +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++ ==== ==== Liens vers les éléments syntaxiques C++ ====
Line 5: Line 71:
 [[cpp:​syntax:​exceptions|Les exceptions en C++]] [[cpp:​syntax:​exceptions|Les exceptions en C++]]
  
-[[cpp:​syntax:​lambda|Les fonctions anonymes en C++]] 
  
 ===== Navigation ===== ===== Navigation =====
in202/seance_4a/td_4a/part_i.1618148021.txt.gz · Last modified: 2021/04/11 13:33 by bmonsuez