परिचय
C++ में एक्सेप्शन हैंडलिंग रनटाइम त्रुटियों को संभालने की एक प्रक्रिया है। एक्सेप्शन एक घटना है जो C++ में रनटाइम पर फेंकी जाती है। सभी एक्सेप्शन std::exception क्लास से प्राप्त होते हैं। यह एक रनटाइम त्रुटि है जिसे संभाला जा सकता है। यदि हम एक्सेप्शन को नहीं संभालते हैं तो यह एक्सेप्शन संदेश प्रिंट करता है और प्रोग्राम समाप्त कर देता है।
सामान्य एक्सेप्शन क्लासेस
| क्र.सं. | एक्सेप्शन और विवरण |
|---|---|
| 1 | std::exception यह एक एक्सेप्शन है और सभी मानक C++ एक्सेप्शन की पैरेंट क्लास है। |
| 2 | std::bad_cast यह dynamic_cast द्वारा फेंका गया एक्सेप्शन है। |
| 3 | std::bad_exception यह एक्सेप्शन C++ प्रोग्राम में अप्रत्याशित एक्सेप्शन को संभालने के लिए उपयोग किया जाता है। |
| 4 | std::bad_alloc यह आमतौर पर new द्वारा फेंका जाता है। |
| 5 | std::logic_error यह एक्सेप्शन कोड पढ़कर पता लगाया जा सकता है। |
| 6 | std::runtime_error यह एक्सेप्शन कोड पढ़कर पता नहीं लगाया जा सकता। |
| 7 | 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 << "sample1 का ऑब्जेक्ट बनाया गया" << endl;
}
~Sample1() {
cout << "sample1 का ऑब्जेक्ट नष्ट किया गया" << endl;
}
};
class Sample2 {
public:
Sample2() {
int i = 7;
cout << "sample2 का ऑब्जेक्ट बनाया गया" << endl;
throw i;
}
~Sample2() {
cout << "sample2 का ऑब्जेक्ट नष्ट किया गया" << endl;
}
};
int main() {
try {
Sample1 s1;
Sample2 s2;
} catch (int i) {
cout << "पकड़ा गया " << i << endl;
}
}
आउटपुट
sample1 का ऑब्जेक्ट बनाया गया sample2 का ऑब्जेक्ट बनाया गया sample1 का ऑब्जेक्ट नष्ट किया गया पकड़ा गया 7
यूजर डिफाइंड एक्सेप्शन
हम exception क्लास को इनहेरिट करके और उसकी कार्यक्षमता को ओवरराइड करके अपने खुद के एक्सेप्शन परिभाषित कर सकते हैं।
उदाहरण कोड
#include <iostream>
#include <exception>
using namespace std;
struct DivideByZero : public exception {
const char * what () const throw () {
return "मेरा एक्सेप्शन";
}
};
int main() {
try {
throw DivideByZero();
} catch (DivideByZero& e) {
cout << "एक्सेप्शन पकड़ा गया" << endl;
cout << e.what() << endl;
} catch (exception& e) {
}
}
आउटपुट
एक्सेप्शन पकड़ा गया मेरा एक्सेप्शन
what() = exception क्लास द्वारा प्रदान की गई एक पब्लिक विधि है जिसे सभी चाइल्ड एक्सेप्शन क्लासेस द्वारा ओवरराइड किया गया है। यह एक्सेप्शन का कारण लौटाता है।