User Tools

Site Tools


in204:tds:sujets:td6:part1

This is an old revision of the document!


Partie I – Manipulation des Exceptions

TD6

Question n°1 : Gestion simple des exceptions en C++

Question n°1.1

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() ;
}

Question n°1.2

Procéder à une exécution et regarder ce qui se passe quand une division par 2 se produit.

Question n°1.3

Exécuter en mode débogage et placer un point d’arrêt sur le code de capture de l’exception.

Correction

Correction

L'objectif de cette question est de vous faire manipuler vos outils pour utiliser l'environnement de dévogage de votre environnement de développement. Bien entendu, en fonction de votre environnement, vous avez des procédures différentes pour positionner un point d'arrêt.

Pour mémoire, voici quelques références pour placer des points d'arrêts sur les différents outils (sans garantie aucune d'exhaustivité).

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::exception se trouvant définie dans le fichier d'entête <exception>.

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.

in204/tds/sujets/td6/part1.1572777911.txt.gz · Last modified: 2019/11/03 10:45 by bmonsuez