[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;
}
}
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(...).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 -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Parfait, bonne continuation