কম্পিউটার টিউটোরিয়াল

C++-এ এক্সসেপশন কীভাবে কাজ করে


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

C++ স্ট্যান্ডার্ডে এক্সসেপশন ক্লাস হিসেবে ডিফাইন করা আছে যা আমরা আমাদের প্রোগ্রামে ব্যবহার করতে পারি। প্যারেন্ট-চাইল্ড ক্লাস হায়ারার্কির সাজেশন নিচে দেখানো হলো:

C++-এ এক্সসেপশন কীভাবে কাজ করে

C++-এ সাধারণ এক্সসেপশন ক্লাসগুলো:

Sr.No.এক্সসেপশন ও বিবরণ
1std::exception
এটি একটি এক্সসেপশন এবং সব স্ট্যান্ডার্ড C++ এক্সসেপশনের প্যারেন্ট ক্লাস।
2std::bad_cast
dynamic_cast দ্বারা থ্রো করা একটি এক্সসেপশন।
3std::bad_exception
এই এক্সসেপশনটি C++ প্রোগ্রামে অনাকাঙ্ক্ষিত এক্সসেপশন হ্যান্ডেল করতে ব্যবহৃত হয়।
4std::bad_alloc
সাধারণত new দ্বারা থ্রো করা হয়।
5std::logic_failure
এই এক্সসেপশনটি কোড পড়ে ডিটেক্ট করা যায়।
6std::runtime_error
এই এক্সসেপশনটি কোড পড়ে ডিটেক্ট করা যায় না।
7std::bad_typeid
typeid দ্বারা থ্রো করা একটি এক্সসেপশন।
কিওয়ার্ড

এক্সসেপশন হ্যান্ডলিং-এ ৩টি কিওয়ার্ড আছে: try, catch এবং throw।

Try/Catch ব্লক

C++-এ, এক্সসেপশন হ্যান্ডলিং try/catch স্টেটমেন্ট দিয়ে করা হয়। যে কোডে এক্সসেপশন ঘটতে পারে সেটি Try ব্লকে রাখা হয়। Catch ব্লক এক্সসেপশন হ্যান্ডেল করতে ব্যবহৃত হয়।

উদাহরণ কোড
#include 
using 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 ক্লাস দ্বারা প্রদত্ত একটি পাবলিক মেথড যা সকল চাইল্ড এক্সসেপশন ক্লাসে ওভাররাইড করা হয়েছে। এটি এক্সসেপশনের কারণ রিটার্ন করে।

  1. C/C++-তে ভেক্টর (vector) কীভাবে কাজ করে

  2. OpenCV-এ C++ ব্যবহার করে মাউস ইভেন্ট নিয়ে কাজ করা

  3. C++17-এ ইনলাইন ভেরিয়েবল কীভাবে কাজ করে?

  4. সি++-এ এক্সেপশন হ্যান্ডেলিং (Exception Handling) বেসিক্স