Posez votre question Signaler

[C++] fonctions try et catch [Résolu]

CQFD - Dernière réponse le 14 juin 2009 à 18:47
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.
#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;
          }
}
Lire la suite 

[C++] fonctions try et catch »

5 réponses
Réponse
+1
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
Por favor ! :-)
Ajouter un commentaire
Réponse
+0
moins plus
Please ! :-)

Merci d'avance.
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
Parfait, bonne continuation
Ajouter un commentaire
Ce document intitulé « [C++] fonctions try et catch » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?