C++ में, एक्सेप्शन हैंडलिंग रनटाइम त्रुटियों को संभालने की एक प्रक्रिया है। एक्सेप्शन C++ में रनटाइम पर फेंका गया एक इवेंट है। सभी एक्सेप्शन std::exception क्लास से प्राप्त होते हैं। यह एक रनटाइम त्रुटि है जिसे संभाला जा सकता है। यदि हम एक्सेप्शन को नहीं संभालते हैं, तो यह एक्सेप्शन संदेश प्रिंट करता है और प्रोग्राम को समाप्त कर देता है।
एक्सेप्शन C++ स्टैंडर्ड में <exception> क्लास के रूप में परिभाषित हैं जिनका उपयोग हम अपने प्रोग्राम में कर सकते हैं। पैरेंट-चाइल्ड क्लास पदानुक्रम की व्यवस्था नीचे दिखाई गई है:

C++ में सामान्य एक्सेप्शन क्लासेस हैं:
| एक्सेप्शन | विवरण |
|---|---|
| std::exception | यह एक एक्सेप्शन है और सभी स्टैंडर्ड C++ एक्सेप्शन की पैरेंट क्लास है। |
| std::bad_cast | यह dynamic_cast द्वारा फेंका गया एक्सेप्शन है। |
| std::bad_exception | यह एक्सेप्शन C++ प्रोग्राम में अप्रत्याशित एक्सेप्शन को संभालने के लिए उपयोग किया जाता है। |
| std::bad_alloc | यह आमतौर पर new द्वारा फेंका जाता है। |
| std::logic_failure | यह एक्सेप्शन कोड पढ़कर पता लगाया जा सकता है। |
| std::runtime_error | यह एक्सेप्शन कोड पढ़कर पता नहीं लगाया जा सकता |
| std::bad_typeid | यह typeid द्वारा फेंका गया एक्सेप्शन है। |
कीवर्ड:
एक्सेप्शन हैंडलिंग में 3 कीवर्ड हैं: try, catch और throw।
Try/Catch ब्लॉक:
C++ में, एक्सेप्शन हैंडलिंग try/catch स्टेटमेंट का उपयोग करके किया जाता है। वह कोड जिसमें एक्सेप्शन हो सकता है, उसे Try ब्लॉक में रखा जाता है। Catch ब्लॉक का उपयोग एक्सेप्शन को संभालने के लिए किया जाता है।
उदाहरण कोड
#include <iostream> using namespace std; class Sample1 { public: Sample1() { cout << "Construct an Object of sample1" << endl; } ~Sample1() { cout << "Destruct an Object of sample1" << endl; } }; class Sample2 { public: Sample2() { int i=7; cout << "Construct an Object of sample2" << endl; throw i; } ~Sample2() { cout << "Destruct an Object of sample2" << endl; } }; int main() { try { Sample1 s1; Sample2 s2; } catch(int i) { cout << "Caught " << i << endl; } }
आउटपुट
Construct an Object of sample1 Construct an Object of sample2 Destruct an Object of sample1 Caught 7
यूजर डिफाइंड एक्सेप्शन:
हम exception क्लास को इनहेरिट करके और उसकी कार्यक्षमता को ओवरराइड करके अपने स्वयं के एक्सेप्शन परिभाषित कर सकते हैं।
उदाहरण कोड
#include <iostream> #include <exception> using namespace std; struct DivideByZero : public exception { const char * what () const throw () { return "My Exception"; } }; int main() { try { throw DivideByZero(); } catch(DivideByZero& e) { cout << "Exception caught" << endl; cout << e.what() << endl; } catch(exception& e) { } }
आउटपुट
Exception caught My Exception what() = एक्सेप्शन क्लास द्वारा प्रदान की गई एक पब्लिक मेथड और इसे सभी चाइल्ड एक्सेप्शन क्लास द्वारा ओवरराइड किया गया है। यह एक्सेप्शन का कारण लौटाता है।