ধরুন একটি ফাংশন আছে যা কিছু গুরুতর জটিল গাণিতিক ক্রিয়াকলাপ গণনা করে। কিন্তু অপারেশন চলাকালীন, কিছু ব্যতিক্রম ঘটতে পারে। আমাদের বিভিন্ন ধরণের ব্যতিক্রমগুলি পরিচালনা করতে হবে যা ঘটতে পারে এবং নিম্নলিখিতগুলি সম্পাদন করতে পারে৷
- যদি কম্পিউটার গণনার জন্য মেমরি বরাদ্দ করতে অক্ষম হয়, তাহলে আমাদের 'মেমরি লো!' প্রিন্ট করতে হবে।
- যদি অন্য কোনো C++-সম্পর্কিত ব্যতিক্রম ঘটে, তাহলে আমাদের 'ব্যতিক্রম:' প্রিন্ট করতে হবে তারপর ব্যতিক্রম।
- অন্য কিছু ঘটলে, আমরা 'আনহ্যান্ডেলড এক্সেপশন' প্রিন্ট করি।
আমাদের একটি অ্যারে দেওয়া হয়েছে যাতে এক জোড়া মান রয়েছে এবং আমরা এটিকে ফাংশনে পাস করি। যদি কোন ব্যতিক্রম ঘটে, আমরা তা পরিচালনা করি, বা অন্যথায়, আমরা আউটপুট মান প্রিন্ট করি।
আমাদের শুধুমাত্র ব্যতিক্রমগুলিকে পরিচালনা করতে হবে ব্যতিক্রমগুলি তৈরি করার ফাংশনের প্রক্রিয়াটিকে উপেক্ষা করে৷
সুতরাং, যদি ইনপুটটি হয় arr ={{361643035132, 2297873642249}, {-17, 15}};, তাহলে আউটপুট হবে −
Memory Low! Exception: val1 is negative
মানগুলির প্রথম জোড়াটি পরিচালনা করার জন্য খুব বড়, তাই 'মেমরি কম' মুদ্রিত হয়। দ্বিতীয় জোড়ার প্রথম মান ঋণাত্মক। প্রদত্ত ফাংশন এটির সাথে কাজ করতে পারে না তাই এটি একটি ব্যতিক্রম 'val1 ইজ নেগেটিভ' তৈরি/থ্রো করে,
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- আরম্ভ করার জন্য i :=0, যখন i
- val1 :=মান[i, 0]
- val2 :=মান[i, 1]
- চেষ্টা করুন,
- প্রিন্ট(foo(val1, val2))
- যদি মেমরি বরাদ্দ না করা যায় (bad_alloc ব্যতিক্রম ধরা পড়ে), তাহলে
- প্রিন্ট("মেমরি কম!")
- অন্যথায়, যদি অন্য কোন স্ট্যান্ডার্ড C++ ব্যতিক্রম e ধরা পড়ে, তাহলে
- মুদ্রণ("ব্যতিক্রম:")
- ব্যতিক্রমের বিবরণ মুদ্রণ করুন
- অন্যথায় অন্য কোন ব্যতিক্রম ধরা পড়লে, তাহলে
- প্রিন্ট("আনহ্যান্ডেলড এক্সেপশন")
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <iostream> #include <exception> #include <string> #include <stdexcept> #include <vector> #include <cmath> using namespace std; class Solution { private: static int value; public: static int foo(long long val1, long long val2) { value += 1; if(val1 < 0) { throw std::invalid_argument("val1 is negative"); } vector<int> vectorList(val1, 0); int r = -1, c = sqrt(-1); if(val2 == 0) throw 0; r = (val1 / val2) * r; int ans = vectorList.at(val2); return r + val1 - val2 * ans; } static int getVal() { return value; } }; int Solution::value = 0; void solve(int t, long int values[][2]) { for (int i = 0; i < t; i++) { long long val1, val2; val1 = values[i][0]; val2 = values[i][1]; try { cout << Solution::foo(val1, val2) << '\n'; } catch (const std::bad_alloc&) { cout << "Memory Low!\n"; } catch (const std::exception& e) { cout << "Exception: " << e.what() << '\n'; } catch (...) { cout << "Unhandled Exception\n"; } } } int main() { long int arr[][2] = {{361643035132, 2297873642249}, {-17, 15}}; solve(2, arr); }
ইনপুট
long int arr[][2] = {{361643035132, 2297873642249}, {-17, 15}}; solve(2, arr);
আউটপুট
Memory Low! Exception: val1 is negative