UdMHaut
UdMBAS

IFT1169
Programmation Avancée en C++

Département d'informatique et de recherche opérationnelle

Direction de l'enseignement de service en informatique
 

Image C++
 
Automne 2024

Accueil

Professeurs et
Démonstrateurs

Horaires et locaux

Notes de cours

Cours
après Cours

Démonstrations
et devoirs

Examens

Liens utiles

Au sujet du
livre de cours

Consultez vos notes

Foire aux questions
(FAQ)

Sessions antérieures

  Démonstration #4  
 
Dernière mise à jour : mercredi 11 septembre 2024 10:52:20
 


Buts:

  • [Exceptions].

  • Q1:Soit la classe Essai ayant les membres publics suivants:
    • classe Erreur
    • constructeur & destructeur de la classe Essai
    • une fonction f qui lève une exception lors de la construction d'une instance de la classe Erreur initialisée à la valeur 100.

    • Écrire la fonction main contenant, la structure de contrôle try/catch. dans try, il y a appel de la fonction f, et catch intercepte l'exception du type Erreur, et un objet e est passé en paramètres afin d'être utilisé pour extraire la valeur de l'erreur.

    • Complétez ce programme par la définition des fonctions terminate & unexpected.

    • Récrire une partie de votre programme pour que la fonction unexpected soit appelée.

  • Q2 Expliquer le fonctionnement du programme suivant (1169demo04exo2.cpp).

  • Q3Le segment de code suivant contient une fuite de mémoire! En effet si une exception est levée, l'instruction "delete ptr" ne sera jamais exécutée. Corriger le segment de programme pour permettre de libérer l'espace mémoire alloué dans tous les cas (exception levée ou pas).
          try {
              Test *ptr = new Test;
              // en cas d'erreur leve l'exception TestError
              cout << ptr->unefonction() << endl; 
              ....
              delete ptr;
          }
          catch(const TestError &err){
              err.affichage();
              return 1;
          }
      

  • Q4: Par de simples opérations mathématiques sur des entiers non signés (unsigned int), vous allez définir les outils nécessaires pour lever les exception: overflow et underflow.
    Ces exceptions vont agir sur les 3 fonctions mathématiques suivantes:

    • add: additionne deux entiers non signés passés en argument (i.e. a+b), et retourne le résultat de l'opération. Cette fonction peut lever que l'exception du type overflow si le résultat de l'opération d'addition est inférieur au premier argument (i.e. a) ou bien au second argument (i.e. b).

    • sous: soustrait deux entiers non signés passés en argument (i.e. a-b), et retourne le résultat de l'opération. Cette fonction peut lever que l'exception du type underflow si le résultat de l'opération d'addition est supérieur au premier argument (i.e. a).

    • calc: calcul une simple opération mathématique (i.e. a+(b-c)) en utilisant 3 entiers non signés passés en argument, et retourne le résultat. Cette opération mathématique est calculée en utilisant pour cela les fonctions préalablement citées (add et sous). Cette fonction lèvera les deux types d'exception précédemment définies: overflow et underflow.

    Chaque exception sera représentée par une structure, ayant les deux membres suivants: fonctmath: nom de la fonction mathématique qui a levé l'exception (ex. add, sous, ou calc). msgexp: message signalant que l'exception (son nom) a été levée par la fonction mathématique (son nom), ex.: "overflow dans add", "underflow dans sous".

    Vote tache consiste à définir l'ensemble des fonctions et des structures précédemment décrites et complétez la fonction main suivante: (1169demo04exo4.cpp).


[top]


dift1169@iro.umontreal.ca