কম্পিউটার

কিভাবে ব্যতিক্রমগুলি C++ এ কাজ করে


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

C++ স্ট্যান্ডার্ডে ব্যতিক্রমগুলিকে ক্লাস হিসাবে সংজ্ঞায়িত করা হয়েছে যা আমরা আমাদের প্রোগ্রামগুলির মধ্যে ব্যবহার করতে পারি। পিতামাতা-সন্তান শ্রেণীর শ্রেণিবিন্যাসের বিন্যাস নীচে দেখানো হয়েছে −

কিভাবে ব্যতিক্রমগুলি C++ এ কাজ করে

C++-এ সাধারণ ব্যতিক্রম ক্লাস হল −

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

কীওয়ার্ড

ব্যতিক্রম পরিচালনায় 3টি কীওয়ার্ড রয়েছে:চেষ্টা করুন, ধরুন এবং নিক্ষেপ করুন৷

চেষ্টা/ক্যাচ ব্লক

C++-এ, ট্রাই/ক্যাচ স্টেটমেন্ট ব্যবহার করে ব্যতিক্রম হ্যান্ডলিং করা হয়। ব্যতিক্রম ঘটতে পারে এমন কোডটি ট্রাই ব্লক দ্বারা স্থাপন করতে ব্যবহৃত হয়। ক্যাচ ব্লক ব্যতিক্রম পরিচালনা করতে ব্যবহৃত হয়।

উদাহরণ কোড

#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

ব্যবহারকারী সংজ্ঞায়িত ব্যতিক্রম

আমরা উত্তরাধিকারসূত্রে এবং ব্যতিক্রম শ্রেণীর কার্যকারিতা ওভাররাইড করে আমাদের নিজস্ব ব্যতিক্রম সংজ্ঞায়িত করতে পারি।

উদাহরণ কোড

#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() = A public method provided by exception class and it has been overridden by all the child exception classes. It returns the cause of an exception.

  1. কিভাবে একটি ভেক্টর C/C++ এ কাজ করে

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

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

  4. C++ এ ব্যতিক্রম হ্যান্ডলিং বেসিক