Rechercher : dans
Par :

[C++] fonctions try et catch

Dernière réponse le 14 jun 2009 à 18:47:57 CQFD, le 13 jun 2009 à 16:24:02 
 Signaler ce message aux modérateurs

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;
          }
}

Meilleures réponses pour « [C++] fonctions try et catch » dans :
Les fonctions en C++ : surcharge et paramètres par défaut. VoirLes fonctions en C++ : surcharge et paramètres par défaut. 1. La surcharge de fonctions et méthodes de classes, dont le constructeur 2. Utilisation des paramètres par défaut En C++, une même fonction ou méthode de classe peut être...
Les inlines en C++ VoirSignification Exemple 1 Inline et headers Exemple 2 Signification Le mot-clé inline est utilisé en C++ et s'applique à une fonction. Il indique au compilateur que chaque appel à la fonction inline devra être remplacé par le corps de cette...
Les piles en langage C VoirLes piles Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la pile IV. Opérations sur les piles A. Initialisation B. Insertion d'un élément dans la pile C. Ôter un élément de la pile D. Affichage...
Langage C - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
Langage C++ - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...

1

CQFD, le 13 jun 2009 à 17:43:30

Por favor ! :-)

Répondre à CQFD

2

CQFD, le 13 jun 2009 à 21:43:22

Please ! :-)

Merci d'avance.

Répondre à CQFD

3

mamiemando, le 14 jun 2009 à 02:11:21
  • +1

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

Répondre à mamiemando

4

CQFD, le 14 jun 2009 à 14:32:11

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

Répondre à CQFD

5

 mamiemando, le 14 jun 2009 à 18:47:57

Parfait, bonne continuation

Répondre à mamiemando