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

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

সি++-এ, এক্সেপশন হ্যান্ডেলিং (Exception Handling) হল একটি প্রসেস যা রানটাইম এরর (runtime errors) হ্যান্ডেল করে। এক্সেপশন (Exception) হল একটি ইভেন্ট যা সি++-এ রানটাইমে থ্রো (thrown) হয়। সব এক্সেপশন std::exception ক্লাস থেকে ডেরাইভড (derived)। এটি একটি রানটাইম এরর যা হ্যান্ডেল করা যায়। এটি এক্সেপশন মেসেজ প্রিন্ট করে এবং প্রোগ্রাম টার্মিনেট করে, যদি আমরা এক্সেপশন হ্যান্ডেল না করি।

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

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

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

এক্সেপশন (Exception)বিবরণ (Description)
std::exceptionএটি একটি এক্সেপশন এবং সব স্ট্যান্ডার্ড সি++ এক্সেপশন এর পেরেন্ট ক্লাস।
std::bad_castdynamic_cast দ্বারা থ্রো করা এক্সেপশন।
std::bad_exceptionসি++ প্রোগ্রামে অপ্রত্যাশিত এক্সেপশন হ্যান্ডেল করতে ব্যবহৃত হয়।
std::bad_allocসাধারণত new দ্বারা থ্রো করা হয়।
std::logic_failureকোড পড়ে এই এক্সেপশন ডিটেক্ট করা যায়।
std::runtime_errorকোড পড়ে এই এক্সেপশন ডিটেক্ট করা যায় না।
std::bad_typeidtypeid দ্বারা থ্রো করা এক্সেপশন।

কীওয়ার্ডসমূহ (Keywords):

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

Try/Catch ব্লক:

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

উদাহরণ কোড

#include <iostream> 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

ইউজার ডিফাইনড এক্সেপশন (User Defined Exception):

আমরা exception ক্লাস ইনহেরিট (inherit) এবং ওভাররাইড (override) করে নিজের এক্সেপশন ডিফাইন করতে পারি।

উদাহরণ কোড

#include <iostream> #include <exception> 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++-এ এক্সসেপশন কীভাবে কাজ করে

  2. C#-এ এক্সেপশন হ্যান্ডলিং (Exception Handling) কী?

  3. C#-এ এক্সেপশন হ্যান্ডলিংয়ের সেরা অভ্যাস (Best Practices)

  4. পাইথনে এক্সসেপশন হ্যান্ডলিং কী