User Tools

Site Tools


in204:tds:sujets:td6:part3

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
in204:tds:sujets:td6:part3 [2019/10/15 07:35]
bmonsuez
— (current)
Line 1: Line 1:
-====== Partie III –  Augmenter l’expressivité des exceptions====== 
- 
-[[in204:​tds:​sujets:​td6|TD6]] 
- 
-Nous souhaitons créer une nouvelle classe d’exception qui dérive de la classe exception et qui compte le nombre de fois qu’une exception est capturée. 
-Nous proposons que cette exception extended_exception dérive de la classe de base std::​exception et fournisse en complément des méthodes offertes par la classe de base les méthodes suivantes : 
- 
-<code cpp> 
-#​include<​exception>​ 
-... 
- 
-class extended_exception : public std::​exception 
-{ 
-  public: 
-    void catched(); 
-      // Est appelé chaque fois que l’on souhaite indiqué à la classe qu’elle a été 
-      // capturée. ​ 
-   int getCatchNumber() const; 
-      // Retourne le nombre de fois que l’exception a été capturée. 
-}; 
-</​code>​ 
- 
-===== Question n°1 =====  
- 
-Proposer une implantation de cette classe. ​ 
- 
-===== Question n°2 =====  
- 
-Nous proposons de créer une classe exception ''​extended_divide_by_zero''​ qui se comporte comme la classe ''​divide_by_zero''​ mais qui dérive de la classe ''​extended_exception''​. 
- 
-Réaliser une implantation de la classe extended_divide_by_zero. 
- 
-===== Question n°3 =====  
- 
-Nous proposons de modifier la fonction ''​divide''​ pour qu’elle lance non plus une exception ''​divide_by_zero''​ mais ''​extended_divide_by_zero''​. 
- 
-Nous souhaitons tester cette nouvelle fonction avec le code suivant : 
- 
-<code cpp> 
-double successive_division(double i); 
- 
- 
-void test_succesive_division()noexcept 
-{ 
-  double i; 
-  std::cout << "Le numerateur: "; 
-  std::cin >> i; 
-  try { 
-   ​successive_division(i);​ 
-  } 
-  catch(division_by_zero e) {  
-    e.catched() ;  
-    std::cout << "​Division par zero au niveau " << e.getCount() ​ 
-               <<​ std::endl ;  
-  } 
-} 
- 
-double successive_division(double i) throw extended_divide_by_zero 
-{ 
-  double j; 
-  std::cout << " Le denominateur suivant (-1 pour arreter): "; 
-  std::cin >> j; 
-  if(j==-1) 
-    return i; 
-  try { 
-    successive_division(j);​ 
-    return divide(i,​j);​ 
-  } 
-  catch(extended_divide_by_zero e) { 
-    e.catched() ;  
-    throw e;  
-  } 
-} 
-</​code>​ 
- 
-Commentez le résultat de l’exécution. 
  
in204/tds/sujets/td6/part3.1571124945.txt.gz · Last modified: 2019/10/15 07:35 by bmonsuez