[C++] fonctions try et catch
Résolu
Bonjour,
je n'arrive pas à résoudre cet exercice.
Il s"agit d'un programme C++ où il faut déterminer le résultat de l'éxécution d'une fonction.
Cette fonction se nomme LancerExceptions( ).
Malheureusement, j'étais absent pendant cette période, et toute cette syntaxe m'embrouille un peu :-)
Auriez-vous l'aimabilité de m'aider à résoudre l'exercice ci-dessous ?
Bien sur, je ne vous demande pas de faire le travail à ma place. Simplement une piste, un début d'idée...
Merci d'avance.
je n'arrive pas à résoudre cet exercice.
Il s"agit d'un programme C++ où il faut déterminer le résultat de l'éxécution d'une fonction.
Cette fonction se nomme LancerExceptions( ).
Malheureusement, j'étais absent pendant cette période, et toute cette syntaxe m'embrouille un peu :-)
Auriez-vous l'aimabilité de m'aider à résoudre l'exercice ci-dessous ?
Bien sur, je ne vous demande pas de faire le travail à ma place. Simplement une piste, un début d'idée...
Merci d'avance.
#include <iostream> #include <string> #include <stdexcept> class Eleve { public : Eleve( ); }; class EleveX { public : EleveX( ); }; class Maitre { Eleve sonEleve; char sonIdentifiant; public : EleveX sonEleveX; Maitre(char Identifiant); } classe MaitreX : public Maitre { double sonNombre; public : MaitreX(double Nombre); ~MaitreX( ); }; Eleve::Eleve( ) { std::cout << "Construction d'un eleve" << std::endl; } EleveX::~EleveX( ) { std::cout << "Destruction d'un eleveX" << std::endl; } Maitre::Maitre(char Identifiant) : sonIdentifiant(Identifiant) { std::cout << "Construction d'un maitre : " << sonIdentifiant << std::endl; if(sonIdentifiant < 'A' || sonIdentifiant > 'Z') throw std::domain_error("L'identifiant n'est pas une lettre"); else std::cout << "L'identifiant est une lettre" << std::endl; } MaitreX::MaitreX(double Nombre) : Maitre('Z'), sonNombre(Nombre) { std::cout << "Construction d'un maitreX : " << sonD << std::endl; } MaitreX::~MaitreX( ) { std::cout << "Destruction d'un maitreX" << std::endl; } void tester(char p) { try { Maitre Maitre2(p); try { if (p <= 'Z') throw (p <= 'Z'); else { std::cout << "OK" << std::endl; } } catch(std::domain_error & uneException) { std::cout << "ErreurTypeA : " << uneException.what( ) << std::endl; test('Z'); } } catch(std::domain_error & uneException) { std:cout << "ErreurTypeB : " << uneException.what( ) << std::endl; test('A'); } } void lancerExceptions( ) { try { MaitreX MaitreX1(3.25); test('0'); } catch(bool & exception) { std::cout << "Exception bool !" << std::endl; } }
A voir également:
- [C++] fonctions try et catch
- Fonction si et - Guide
- Codes secrets Android : accéder aux fonctions cachées - Guide
- Impossible d'installer hyper-v le processeur ne dispose pas des fonctions de virtualisation requises ✓ - Forum Hyper-V
- 450 : 450 4.7.0 service refuse. veuillez essayer plus tard. service refused, please try later. lpn105_510 ✓ - Forum Laposte
- Impossible d'envoyer des mails depuis laposte.net ✓ - Forum Mail
5 réponses
Petit rappel de cours. En C++ une fonction est quittée a priori par un point de sortie, a priori un return (éventuellement l'accolade fermante de la fonction si cette fonction ne retourne rien).
Toute fois il est possible d'interrompre l'exécution d'une fonction f en levant une erreur (à l'aide d'un throw). On n'est pas obligé de mettre une erreur à la suite du throw. La fonction g qui a appelé la fonction f est a priori sensée englober l'appel de f avec un bloc try catch, sinon le programme est interrompu.
- Quand aucune erreur n'est levée, le bloc try est intégralement exécuté et le(s) catch(s) associé(s) est (sont)
ignoré(s).
- Si une erreur est levé, le bloc try est interrompu (les instructions après f sont ignorées) et l'on rentre dans le bloc catch qui correspond à l'erreur levé. Il est possible de faire un "catch" par défaut quand tous les catch du bloc try catch n'ont pas rattrapé l'erreur : celui ci est noté catch(...).
Maintenant il ne te reste plus qu'à copier coller ton code dans un environnement de développement C++ (par exemple code::blocks ou dev-cpp sous windows et kdevelop ou anjuta sous linux) et regarder ce qui se passe.
Bonne chance
Toute fois il est possible d'interrompre l'exécution d'une fonction f en levant une erreur (à l'aide d'un throw). On n'est pas obligé de mettre une erreur à la suite du throw. La fonction g qui a appelé la fonction f est a priori sensée englober l'appel de f avec un bloc try catch, sinon le programme est interrompu.
- Quand aucune erreur n'est levée, le bloc try est intégralement exécuté et le(s) catch(s) associé(s) est (sont)
ignoré(s).
- Si une erreur est levé, le bloc try est interrompu (les instructions après f sont ignorées) et l'on rentre dans le bloc catch qui correspond à l'erreur levé. Il est possible de faire un "catch" par défaut quand tous les catch du bloc try catch n'ont pas rattrapé l'erreur : celui ci est noté catch(...).
try{ //... f(); //... }catch(type_err1 & e1){ // ... }catch(type_err2 & e2){ //... }catch(...){ // catch les erreurs non rattrapées // }
Maintenant il ne te reste plus qu'à copier coller ton code dans un environnement de développement C++ (par exemple code::blocks ou dev-cpp sous windows et kdevelop ou anjuta sous linux) et regarder ce qui se passe.
Bonne chance
Merci pour toutes vos explications, Mamiemando.
Mon problème est résolu, je viens d'éxécuter le programme avec Code::Blocks.
Bonne journée.
http://www.attentionauchien.com/images/ecards/merci.jpg
Mon problème est résolu, je viens d'éxécuter le programme avec Code::Blocks.
Bonne journée.
http://www.attentionauchien.com/images/ecards/merci.jpg
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question