Maison >développement back-end >C++ >Le programme C++ crée une exception personnalisée
L'exception est un concept essentiel du C++. Des exceptions se produisent lorsqu'une opération indésirable ou impossible se produit pendant l'exécution. La gestion de ces opérations indésirables ou impossibles en C++ est appelée gestion des exceptions. La gestion des exceptions utilise principalement trois mots-clés spécifiques, à savoir « try », « catch » et « throw ». Le mot-clé « try » est utilisé pour exécuter du code pouvant rencontrer des exceptions, le mot-clé « catch » est utilisé pour gérer ces exceptions et le mot-clé « throws » est utilisé pour créer des exceptions. Les exceptions en C++ peuvent être divisées en deux types, à savoir les exceptions STL et les exceptions définies par l'utilisateur. Dans cet article, nous nous concentrons sur la façon de créer ces exceptions personnalisées. Plus de détails sur la gestion des exceptions peuvent être trouvés ici.
Tout d'abord, nous avons vu comment créer des exceptions personnalisées à l'aide d'une seule classe. Pour ce faire, nous devons définir une classe et lever une exception à partir de cette classe.
//user-defined class class Test{}; try{ //throw object of that class throw Test(); } catch(Test t) { .... }
#include <iostream> using namespace std; //define a class class Test{}; int main() { try{ //throw object of that class throw Test(); } catch(Test t) { cout << "Caught exception 'Test'!" << endl; } return 0; }
Caught exception 'Test'!Le bloc
‘try’ lancera les exceptions de cette classe, tandis que le bloc ‘catch’ n’interceptera que les exceptions de cette classe spécifique. S'il existe deux classes d'exceptions définies par l'utilisateur, elles doivent être traitées séparément.
Le processus est simple, comme prévu, s'il y a plusieurs exceptions, chacune doit être traitée individuellement.
//user-defined class class Test1{}; class Test2{}; try{ //throw object of the first class throw Test1(); } catch(Test1 t){ .... } try{ //throw object of the second class throw Test2(); } catch(Test2 t){ .... }
#include <iostream> using namespace std; //define multiple classes class Test1{}; class Test2{}; int main() { try{ //throw objects of multiple classes throw Test1(); } catch(Test1 t) { cout << "Caught exception 'Test1'!" << endl; } try{ throw Test2(); } catch(Test2 t) { cout << "Caught exception 'Test2'!" << endl; } return 0; }
Caught exception 'Test1'! Caught exception 'Test2'!
Nous avons dû utiliser deux blocs try-catch différents pour gérer deux catégories différentes d'exceptions. Voyons maintenant si nous pouvons créer et gérer des exceptions à l'aide de constructeurs.
Nous pouvons utiliser le constructeur de classe pour créer des exceptions personnalisées. Dans l'exemple ci-dessous, nous pouvons voir que le lancement et la gestion des exceptions sont gérés à l'intérieur du constructeur de classe.
#include <iostream> using namespace std; //define a class class Test1{ string str; public: //try-catch in the constructor Test1(string str){ try{ if (str == "Hello"){ throw "Exception! String cannot be 'Hello'!"; } this->str = str; } catch(const char* s) { cout << s << endl; } } }; int main() { Test1 t("Hello"); return 0; }
Exception! String cannot be 'Hello'!
La gestion des exceptions est l'une des fonctionnalités les plus importantes fournies par C++. Nous pouvons hériter de la classe d’exceptions C++ et l’utiliser pour implémenter la gestion des exceptions, mais il ne s’agit que d’une bonne pratique et n’est pas obligatoire pour créer des exceptions personnalisées. L'avantage d'hériter de la classe d'exception C++ est que s'il existe une instruction catch normale interceptant std::exception, elle peut gérer n'importe quelle exception définie par l'utilisateur sans avoir besoin de connaître les détails spécifiques. Il convient de noter que l'instruction 'throws' ne fonctionne que dans le bloc 'try', sinon elle ne fonctionnera pas. L'instruction 'catch' ne peut gérer que les exceptions levées par les classes définies par l'utilisateur ou certaines classes STL.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!