User Tools

Site Tools


in202:seance_4a:td_4a:part_i

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<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.

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 ''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++

in202/seance_4a/td_4a/part_i.txt · Last modified: 2022/11/18 10:46 (external edit)