C++-এ, এক্সসেপশন হ্যান্ডলিং হল রানটাইম এরর হ্যান্ডেল করার একটি প্রক্রিয়া। এক্সসেপশন হল একটি ইভেন্ট যা C++-এ রানটাইমে থ্রো করা হয়। সব এক্সসেপশন std::exception ক্লাস থেকে ডেরাইভড। এটি একটি রানটাইম এরর যা হ্যান্ডেল করা যায়। এটি এক্সসেপশন মেসেজ প্রিন্ট করে এবং প্রোগ্রাম টার্মিনেট করে, যদি আমরা এক্সসেপশন হ্যান্ডেল না করি।
C++ স্ট্যান্ডার্ডে এক্সসেপশন

C++-এ সাধারণ এক্সসেপশন ক্লাসগুলো:
| Sr.No. | এক্সসেপশন ও বিবরণ |
|---|---|
| 1 | std::exception এটি একটি এক্সসেপশন এবং সব স্ট্যান্ডার্ড C++ এক্সসেপশনের প্যারেন্ট ক্লাস। |
| 2 | std::bad_cast dynamic_cast দ্বারা থ্রো করা একটি এক্সসেপশন। |
| 3 | std::bad_exception এই এক্সসেপশনটি C++ প্রোগ্রামে অনাকাঙ্ক্ষিত এক্সসেপশন হ্যান্ডেল করতে ব্যবহৃত হয়। |
| 4 | std::bad_alloc সাধারণত new দ্বারা থ্রো করা হয়। |
| 5 | std::logic_failure এই এক্সসেপশনটি কোড পড়ে ডিটেক্ট করা যায়। |
| 6 | std::runtime_error এই এক্সসেপশনটি কোড পড়ে ডিটেক্ট করা যায় না। |
| 7 | std::bad_typeid typeid দ্বারা থ্রো করা একটি এক্সসেপশন। |
এক্সসেপশন হ্যান্ডলিং-এ ৩টি কিওয়ার্ড আছে: try, catch এবং throw।
C++-এ, এক্সসেপশন হ্যান্ডলিং try/catch স্টেটমেন্ট দিয়ে করা হয়। যে কোডে এক্সসেপশন ঘটতে পারে সেটি Try ব্লকে রাখা হয়। Catch ব্লক এক্সসেপশন হ্যান্ডেল করতে ব্যবহৃত হয়।
#includeusing namespace std; class Sample1 { public: Sample1() { cout << "Construct an Object of sample1" << endl; } ~Sample1() { cout << "Destruct an Object of sample1" << endl; } }; class Sample2 { public: Sample2() { int i = 7; cout << "Construct an Object of sample2" << endl; throw i; } ~Sample2() { cout << "Destruct an Object of sample2" << endl; } }; int main() { try { Sample1 s1; Sample2 s2; } catch (int i) { cout << "Caught " << i << endl; } }
Construct an Object of sample1 Construct an Object of sample2 Destruct an Object of sample1 Caught 7
আমরা exception ক্লাস ইনহেরিট এবং ওভাররাইড করে নিজস্ব এক্সসেপশন ডিফাইন করতে পারি।
#include#include using namespace std; struct DivideByZero : public exception { const char* what() const throw() { return "My Exception"; } }; int main() { try { throw DivideByZero(); } catch (DivideByZero& e) { cout << "Exception caught" << endl; cout << e.what() << endl; } catch (exception& e) {} }
Exception caught My Exception
what() = exception ক্লাস দ্বারা প্রদত্ত একটি পাবলিক মেথড যা সকল চাইল্ড এক্সসেপশন ক্লাসে ওভাররাইড করা হয়েছে। এটি এক্সসেপশনের কারণ রিটার্ন করে।