Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1338 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Exceptions et héritages

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Exceptions et héritages

n°501534
blackgodde​ss
vive le troll !
Posté le 29-08-2003 à 11:28:57  profilanswer
 

bonjour,  
 
je déclare 3 classes d'exceptions :
 

Code :
  1. class CMyException {};
  2. class CMyExceptionSpecific1 : CMyException {};
  3. class CMyExceptionSpecific2 : CMyException {};


 
puis, ensuite, dans mon code :
 

Code :
  1. try
  2. {
  3.     throw CMyExceptionSpecific1();
  4. }
  5. catch(CMyException e)
  6. {
  7.     //
  8. }


 
est-ce possibke de savoir si e est de type CMyExceptionSpecific1 ? (sans faire un catch spécial : catch(CMyExceptionSpecific1 e))
et si oui, comment doit-on faire ? rajouter une méthode donnant un type ?


---------------
-( BlackGoddess )-
mood
Publicité
Posté le 29-08-2003 à 11:28:57  profilanswer
 

n°501543
LetoII
Le dormeur doit se réveiller
Posté le 29-08-2003 à 11:35:31  profilanswer
 

BlackGoddess a écrit :

bonjour,  
 
je déclare 3 classes d'exceptions :
 

Code :
  1. class CMyException {};
  2. class CMyExceptionSpecific1 : CMyException {};
  3. class CMyExceptionSpecific2 : CMyException {};


 
puis, ensuite, dans mon code :
 

Code :
  1. try
  2. {
  3.     throw CMyExceptionSpecific1();
  4. }
  5. catch(CMyException e)
  6. {
  7.     //
  8. }


 
est-ce possibke de savoir si e est de type CMyExceptionSpecific1 ? (sans faire un catch spécial : catch(CMyExceptionSpecific1 e))
et si oui, comment doit-on faire ? rajouter une méthode donnant un type ?


 
Qu'est ce que tu veux faire?


---------------
Le Tyran
n°501544
Taz
bisounours-codeur
Posté le 29-08-2003 à 11:38:17  profilanswer
 

putain, vos meres vous ont jamais appris à attraper les expressions ? et à faire heriter de std::exception ? :o

n°501551
LetoII
Le dormeur doit se réveiller
Posté le 29-08-2003 à 11:40:55  profilanswer
 

Taz a écrit :

putain, vos meres vous ont jamais appris à attraper les expressions ? et à faire heriter de std::exception ? :o  


 
J'avais pas remarqué effectivement, honte sur moi :whistle:


---------------
Le Tyran
n°501554
blackgodde​ss
vive le troll !
Posté le 29-08-2003 à 11:42:31  profilanswer
 

ma mère fait pas de cpp, dsl :/
comment on utilise std::exception ?
sur le cours que j'ai, ca parle juste de bad_exception.


---------------
-( BlackGoddess )-
n°501557
LetoII
Le dormeur doit se réveiller
Posté le 29-08-2003 à 11:46:14  profilanswer
 

Code :
  1. #include <exception>
  2.   class CMyException : public std::exception {/*...*/};
  3.   class CMyExceptionSpecific1 : public CMyException {/*...*/};
  4.   class CMyExceptionSpecific2 : public CMyException {/*...*/};


 
Et tu surcharge les méthodes qui vont bien (comem what par exemple).
 

Code :
  1. try
  2.   {
  3.         throw CMyExceptionSpecific1();
  4.   }
  5.   catch(CMyException &e)//Attention on rattrape tjrs par référence
  6.   {
  7.         //
  8.   }


Message édité par LetoII le 29-08-2003 à 11:47:07

---------------
Le Tyran
n°501559
LetoII
Le dormeur doit se réveiller
Posté le 29-08-2003 à 11:47:45  profilanswer
 

Bon si non qu'est ce que tu veux faire exactement, pkoi t'as besoin de savoir le type exacte?


---------------
Le Tyran
n°501569
blackgodde​ss
vive le troll !
Posté le 29-08-2003 à 11:55:32  profilanswer
 

et bien en fait je voudrais faire un catch général pour toutes les exceptions qui pourraient se produire dans mon tr{} : catch(CMyException &e), puis, à l'intérieur de ce catch, savoir quelle classe particulière a été lancée en exception.


---------------
-( BlackGoddess )-
n°501572
LetoII
Le dormeur doit se réveiller
Posté le 29-08-2003 à 11:57:01  profilanswer
 

BlackGoddess a écrit :

et bien en fait je voudrais faire un catch général pour toutes les exceptions qui pourraient se produire dans mon tr{} : catch(CMyException &e), puis, à l'intérieur de ce catch, savoir quelle classe particulière a été lancée en exception.


 
Normalement t'as pas besoin de savoir, ou laors tu fais un catch spécifique ou t'as un problème de conception  [:spamafote]


---------------
Le Tyran
n°501573
Taz
bisounours-codeur
Posté le 29-08-2003 à 11:58:31  profilanswer
 

je vous retrouve le messagee qui va bien
 

Citation :

ah ouais? ok, je vais vous expliquer pourquoi il est essentiel de capturer les exceptions par const référence.
 
1) pour le polymorphisme! rappelez vous que la grande majorité des exceptions sont basées tot ou tard sur une classe mère, le plus souvent au plus bas niveua sur std::exception. si vous capturez par valeur, vous risquez vraisemblablement de perdre de l'information, puis que par définition, quand on catch, on essaye de ramasser ce qu'on peut, on n'a aucune assurance sur ce qui arrive
 
2) pour empecher que l'exception génère elle meme une exception! pour cela, la plus part des fonctions membres des exceptions sont const et surtout marquer comme ne lançant pas d'exception. il faut suivre ce contrat qui est un gage de sécurité. le problème si on attrape par valeur, c'est que la copie d'un objet peut générer une exception, notemment si on est dans une situation de bad_alloc, tout peut arriver.
 
donc on doit capturer les exceptions par const référence pour des raisons d'efficacité et de sécurité. si on ne le fait pas, la gestion est bancale et posera problème tot ou tard. le 2eme point vous parait peut etre parano, pourtant il est tout aussi important que le premier.


 
http://forum.hardware.fr/forum2.ph [...] 606&cat=10

mood
Publicité
Posté le 29-08-2003 à 11:58:31  profilanswer
 

n°501576
Taz
bisounours-codeur
Posté le 29-08-2003 à 12:01:42  profilanswer
 

LetoII a écrit :


 
Normalement t'as pas besoin de savoir, ou laors tu fais un catch spécifique ou t'as un problème de conception  [:spamafote]  

ben non. plusieurs bloc catch peuvent aller (necore faut il les mettre dans un bon ordre) mais des fois ça ne suffit pas ou ne te permettra pas un traitement adéquouate (héritage multiple, souvent utilisé pour les exceptions). à ce moment là, les RTTI t'apportent des infos supplémentaires pour choisir la bonne stratégie)

n°501583
blackgodde​ss
vive le troll !
Posté le 29-08-2003 à 12:09:13  profilanswer
 

non mais ! tout a l'heure j'ai fait une recherche sur Exceptions, et il m'a rien trouvé !!!


---------------
-( BlackGoddess )-
n°501586
Taz
bisounours-codeur
Posté le 29-08-2003 à 12:12:51  profilanswer
 

pourtant Joce assure que la recherche est fonctionnelle [:joce]

n°501604
LetoII
Le dormeur doit se réveiller
Posté le 29-08-2003 à 12:47:16  profilanswer
 

Taz a écrit :

pourtant Joce assure que la recherche est fonctionnelle [:joce]


 
C joce en même temp.  :whistle:


---------------
Le Tyran

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Exceptions et héritages

 

Sujets relatifs
Le mécanisme de gestion d'exceptions des JSPExceptions
Borland => problème avec exceptionsThreads et Exceptions
2 questions : gestion des exceptions et paramètres des fonctionscapture d'exceptions
gestion des exceptions dans les classes en cpples exceptions en c++
Gestion des exceptions dans les ServletsLes exceptions, y a une truc que j'comprend pas.
Plus de sujets relatifs à : Exceptions et héritages


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR