বেস ও ডেরাইভড ক্লাস দুটির জন্য এক্সেপশন ক্যাচ করতে হলে ডেরাইভড ক্লাসের ক্যাচ ব্লকটি বেস ক্লাসের আগে রাখতে হয়। অন্যথায়, ডেরাইভড ক্লাসের ক্যাচ ব্লকটি কখনো পৌঁছাবে না।
অ্যালগরিদম
শুরু 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 {}; // D ক্লাস B ক্লাসকে ইনহেরিট করেছে int main() { D derived; try { throw derived; } catch(B b) { cout << "বেস এক্সেপশন ক্যাচ হয়েছে"; // বেস ক্লাসের ক্যাচ ব্লক } catch(D derived){ cout << "ডেরাইভড এক্সেপশন ক্যাচ হয়েছে"; // ডেরাইভড ক্লাসের ক্যাচ ব্লক } return 0; }আউটপুট
বেস এক্সেপশন ক্যাচ হয়েছে অতএব প্রমাণিত হল যে ডেরাইভড ক্লাসের ক্যাচ ব্লকটি বেস ক্লাসের আগে রাখতে হয়। অন্যথায়, ডেরাইভড ক্লাসের ক্যাচ ব্লকটি কখনো পৌঁছাবে না।