এই বিভাগে, আমরা দেখব কিভাবে ব্যতিক্রম পরিচালনার জন্য ক্যাচ ব্লক ব্যবহার করতে হয় এবং C++ এ টাইপ রূপান্তর করতে হয়।
প্রথমে, আসুন আমরা একটি কোড দেখি, এবং আমরা দেখব আউটপুট কি হবে এবং কিভাবে তারা তৈরি করছে।
উদাহরণ
#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 ){ // Defining the Conversion constructor
cout << "From the Conversion constructor";
}
};
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
প্রাপ্ত টাইপ অবজেক্টগুলিকে বেস টাইপ অবজেক্টে রূপান্তরিত করা হয় না যখন ডেরাইভ টাইপ অবজেক্টগুলি নিক্ষেপ করা হয়।