बेस और डेराइव्ड दोनों क्लास के एक्सेप्शन को पकड़ने के लिए, डेराइव्ड क्लास के कैच ब्लॉक को बेस क्लास से पहले रखना आवश्यक है। अन्यथा, डेराइव्ड क्लास का कैच ब्लॉक कभी नहीं पहुंचेगा।
एल्गोरिदम
शुरुआत
क्लास B घोषित करें
क्लास D घोषित करें जो क्लास B को इनहेरिट करती है
क्लास D का ऑब्जेक्ट घोषित करें
Try: derived थ्रो करें
Catch (D derived)
"डेराइव्ड एक्सेप्शन पकड़ा गया" प्रिंट करें
Catch (B b)
"बेस एक्सेप्शन पकड़ा गया" प्रिंट करें
समाप्ति
यहां एक सरल उदाहरण है जहां डेराइव्ड क्लास का कैच ब्लॉक बेस क्लास से पहले रखा गया है, अब आउटपुट देखें:
#include <iostream>
using namespace std;
class B {};
class D: public B {}; // क्लास D, क्लास B को इनहेरिट करती है
int main() {
D derived;
try {
throw derived;
}
catch(D derived) {
cout << "डेराइव्ड एक्सेप्शन पकड़ा गया"; // डेराइव्ड क्लास का कैच ब्लॉक
}
catch(B b) {
cout << "बेस एक्सेप्शन पकड़ा गया"; // बेस क्लास का कैच ब्लॉक
}
return 0;
}
आउटपुट
डेराइव्ड एक्सेप्शन पकड़ा गया
यहां एक सरल उदाहरण है जहां बेस क्लास का कैच ब्लॉक डेराइव्ड क्लास से पहले रखा गया है, अब आउटपुट देखें:
#include <iostream>
using namespace std;
class B {};
class D: public B {};
int main() {
D derived;
try {
throw derived;
}
catch(B b) {
cout << "बेस एक्सेप्शन पकड़ा गया"; // बेस क्लास का कैच ब्लॉक
}
catch(D derived) {
cout << "डेराइव्ड एक्सेप्शन पकड़ा गया"; // डेराइव्ड क्लास का कैच ब्लॉक
}
return 0;
}
आउटपुट
बेस एक्सेप्शन पकड़ा गयाइस प्रकार यह सिद्ध होता है कि हमें डेराइव्ड क्लास के कैच ब्लॉक को बेस क्लास से पहले रखना चाहिए। अन्यथा, डेराइव्ड क्लास का कैच ब्लॉक कभी नहीं पहुंचेगा।
नियम
- कैच ब्लॉक्स को सबसे विशिष्ट से सबसे सामान्य क्रम में रखें
- डेराइव्ड क्लास के कैच ब्लॉक पहले, फिर बेस क्लास के
- बेस क्लास का कैच ब्लॉक डेराइव्ड क्लास ऑब्जेक्ट को भी पकड़ लेगा (पॉलीमॉर्फिज्म के कारण)