এই বিভাগে আমরা দেখব কিভাবে সি++-এ এক্সেপশন হ্যান্ডলিং-এর জন্য ক্যাচ ব্লক এবং টাইপ কনভার্সন ব্যবহার করা হয়।
প্রথমে একটি কোড দেখি এবং এর আউটপুট কী হবে তা বিশ্লেষণ করি।
উদাহরণ ১
#include <iostream>
using namespace std;
int main() {
try {
throw 'a';
}
catch (int a) {
cout << "Integer value is caught :" << a;
}
catch (...) {
cout << "Entering into default catch block";
}
}
আউটপুট
Entering into default catch block
কারণ কী? ক্যারেক্টার 'a' থ্রো করা হয়েছে, কিন্তু প্রথম ক্যাচ ব্লকটি int-এর জন্য। যদি আমরা ভাবি 'a'-এর ASCII ভ্যালু একটি পূর্ণসংখ্যা, তাহলে প্রথম ব্লকে ঢুকবে, কিন্তু ক্যাচ ব্লকে এই ধরনের কনভার্সন প্রযোজ্য নয়।
উদাহরণ ২: কনভার্সন কনস্ট্রাক্টর কল না হওয়া
#include <iostream>
using namespace std;
class TestExcept1 {};
class TestExcept2 {
public:
TestExcept2 (const TestExcept1 &e) { // কনভার্সন কনস্ট্রাক্টর
cout << "From the Conversion constructor";
}
};
int main() {
try {
TestExcept1 exp1;
throw exp1;
}
catch (TestExcept2 e2) {
cout << "Caught TestExcept2 " << endl;
}
catch (...) {
cout << "Entering into default catch block " << endl;
}
}
আউটপুট
Entering into default catch block
থ্রো করা অবজেক্টের জন্য কনভার্সন কনস্ট্রাক্টর কল হয় না। ডেরাইভড টাইপের অবজেক্টগুলো বেস টাইপের অবজেক্টে রূপান্তরিত হয় না যখন ডেরাইভড টাইপের অবজেক্ট থ্রো করা হয়।