सी ++ में, अपवाद हैंडलिंग रनटाइम त्रुटियों को संभालने की एक प्रक्रिया है। अपवाद एक घटना है जिसे सी ++ में रनटाइम पर फेंक दिया जाता है। सभी अपवाद std::Exception वर्ग से लिए गए हैं। यह एक रनटाइम त्रुटि है जिसे संभाला जा सकता है। अगर हम अपवाद को हैंडल नहीं करते हैं तो यह अपवाद संदेश को प्रिंट करता है और प्रोग्राम को समाप्त कर देता है।
अपवादों को C++ मानक में <अपवाद> वर्ग के रूप में परिभाषित किया गया है जिसका उपयोग हम अपने कार्यक्रमों के अंदर कर सकते हैं। अभिभावक-बाल वर्ग पदानुक्रम की व्यवस्था नीचे दिखाई गई है:
C++ में सामान्य अपवाद वर्ग हैं:
अपवाद | <थ>विवरण|
---|---|
std::अपवाद | यह सभी मानक C++ अपवादों का अपवाद और मूल वर्ग है। |
std::bad_cast | यह डायनेमिक_कास्ट द्वारा दिया गया एक अपवाद है। |
std::bad_exception | इस अपवाद का उपयोग C++ प्रोग्राम में अप्रत्याशित अपवादों को संभालने के लिए किया जाता है। |
std::bad_alloc | इसे आम तौर पर नए द्वारा फेंका जाता है। |
std::logic_failure | कोड पढ़कर इस अपवाद का पता लगाया जा सकता है। |
std::runtime_error | कोड पढ़कर इस अपवाद का पता नहीं लगाया जा सकता |
std::bad_typeid | यह टाइपिड द्वारा दिया गया एक अपवाद है। |
कीवर्ड:
अपवाद प्रबंधन में 3 कीवर्ड हैं:कोशिश करें, पकड़ें और फेंकें।
कोशिश करें/अवरुद्ध करें:
C++ में, 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
उपयोगकर्ता परिभाषित अपवाद:
हम अपवाद वर्ग कार्यात्मकताओं को इनहेरिट और ओवरराइड करके अपने स्वयं के अपवादों को परिभाषित कर सकते हैं।
उदाहरण कोड
#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() = A public method provided by exception class and it has been overridden by all the child exception classes. It returns the cause of an exception.