Exception Handling C++ এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা প্রোগ্রাম চলাকালীন সময়ে যেকোনো ধরনের অনাকাঙ্ক্ষিত বা অপ্রত্যাশিত সমস্যার সমাধানে ব্যবহৃত হয়। C++ এ Exception Handling এর মাধ্যমে প্রোগ্রামারেরা ব্যতিক্রম বা ত্রুটি মোকাবেলা করতে পারে, যা প্রোগ্রামকে সুরক্ষিত এবং কার্যকর রাখতে সাহায্য করে। C++ এর Exception Handling মেকানিজম try, catch, এবং throw কীওয়ার্ডের উপর ভিত্তি করে কাজ করে।
Exception Handling এর মৌলিক ধারণা
Exception হলো এমন একটি পরিস্থিতি যা প্রোগ্রাম চলাকালীন ত্রুটি বা ব্যতিক্রম ঘটায়, যেমন বিভাজ্য শূন্য দ্বারা ভাগ (division by zero), ফাইল খোলা না যাওয়া, মেমোরি এলোকেশন ব্যর্থ হওয়া ইত্যাদি। C++ এর Exception Handling মেকানিজম এই ত্রুটিগুলোর সমাধান করার একটি কাঠামো প্রদান করে, যাতে প্রোগ্রাম ব্যতিক্রম ঘটলেও সম্পূর্ণভাবে বন্ধ না হয়।
- try:
tryব্লকের মধ্যে সেই কোড রাখা হয়, যেটিতে ব্যতিক্রম ঘটার সম্ভাবনা থাকে। - catch:
catchব্লকটি সেই ব্যতিক্রম ধরতে এবং সেই অনুযায়ী কাজ করতে ব্যবহৃত হয়। - throw:
throwকীওয়ার্ড ব্যবহার করে ব্যতিক্রম ঘটানো হয়, যাcatchব্লকে ধরা যায়।
Exception Handling এর মৌলিক গঠন
try {
// এমন কোড যা ত্রুটি ঘটাতে পারে
} catch (exception_type variable) {
// ত্রুটি সমাধানের জন্য কোড
}এখানে, try ব্লকের ভেতরের কোডে যদি কোনো ব্যতিক্রম ঘটে, তবে তা catch ব্লকে ধরা হবে। catch ব্লকের প্যারামিটার exception_type সেই ব্যতিক্রমের ধরনের জন্য নির্ধারিত।
উদাহরণ: ব্যতিক্রম ঘটানো এবং ধরা
#include <iostream>
int main() {
int a = 10, b = 0;
try {
if (b == 0) {
throw "Division by zero error!"; // ব্যতিক্রম ঘটানো
}
std::cout << "Result: " << a / b << std::endl;
} catch (const char* e) { // ব্যতিক্রম ধরা
std::cerr << "Exception: " << e << std::endl;
}
return 0;
}আউটপুট:
Exception: Division by zero error!এখানে b == 0 হলে throw কীওয়ার্ড ব্যবহার করে একটি ব্যতিক্রম ঘটানো হয়েছে। catch ব্লক সেই ব্যতিক্রম ধরেছে এবং Division by zero error! মেসেজ প্রদর্শন করেছে।
একাধিক catch ব্লক ব্যবহার
C++ এ একই try ব্লকের সাথে একাধিক catch ব্লক থাকতে পারে। এটি বিভিন্ন ধরনের ব্যতিক্রম ধরতে সহায়ক।
#include <iostream>
int main() {
try {
int x;
std::cout << "Enter a number: ";
std::cin >> x;
if (x < 0) throw std::runtime_error("Negative number error!");
else if (x == 0) throw 0;
else if (x > 100) throw 1.0;
std::cout << "You entered: " << x << std::endl;
} catch (const std::runtime_error& e) {
std::cerr << "Runtime error: " << e.what() << std::endl;
} catch (int) {
std::cerr << "Exception: Zero input error!" << std::endl;
} catch (double) {
std::cerr << "Exception: Input greater than 100!" << std::endl;
}
return 0;
}আউটপুট:
Enter a number: -5
Runtime error: Negative number error!এখানে একাধিক catch ব্লক ব্যবহৃত হয়েছে এবং প্রতিটি আলাদা ধরনের ব্যতিক্রম ধরার জন্য কাজ করেছে।
কাস্টম Exception ক্লাস তৈরি
C++ এ প্রয়োজন অনুযায়ী কাস্টম Exception ক্লাস তৈরি করা যায়। কাস্টম Exception ক্লাস ব্যবহার করে নির্দিষ্ট ত্রুটির জন্য আরও বিস্তারিত ব্যতিক্রম হ্যান্ডলিং তৈরি করা সম্ভব।
উদাহরণ: কাস্টম Exception ক্লাস
#include <iostream>
#include <stdexcept>
class DivideByZeroException : public std::runtime_error {
public:
DivideByZeroException() : std::runtime_error("Division by zero error!") {}
};
int divide(int a, int b) {
if (b == 0) {
throw DivideByZeroException(); // কাস্টম ব্যতিক্রম ঘটানো
}
return a / b;
}
int main() {
try {
std::cout << "Result: " << divide(10, 0) << std::endl;
} catch (const DivideByZeroException& e) {
std::cerr << "Exception: " << e.what() << std::endl;
}
return 0;
}আউটপুট:
Exception: Division by zero error!এখানে, DivideByZeroException একটি কাস্টম ব্যতিক্রম ক্লাস যা std::runtime_error থেকে অবিরত হয়েছে। divide ফাংশন ব্যতিক্রম ঘটালে main ফাংশনের catch ব্লক সেই ব্যতিক্রম ধরে এবং মেসেজ প্রদর্শন করে।
ব্যতিক্রম প্রোপাগেশন (Exception Propagation)
C++ এ ব্যতিক্রম এক ফাংশন থেকে অন্য ফাংশনে প্রেরণ করা যেতে পারে। যখন একটি ফাংশনে ব্যতিক্রম ঘটানো হয় এবং সেটি যদি ব্যতিক্রম হ্যান্ডেল না করে, তবে ব্যতিক্রমটি তার কলিং ফাংশনে প্রেরিত হয়। একে Exception Propagation বলে।
#include <iostream>
void func2() {
throw "Error occurred in func2"; // ব্যতিক্রম ঘটানো
}
void func1() {
func2(); // ব্যতিক্রমটি func1 এ আসবে
}
int main() {
try {
func1();
} catch (const char* e) {
std::cerr << "Caught Exception: " << e << std::endl;
}
return 0;
}আউটপুট:
Caught Exception: Error occurred in func2এখানে func2 তে ব্যতিক্রম ঘটেছে, যা func1 এ প্রেরিত হয়েছে এবং অবশেষে main এ ধরা হয়েছে।
উপসংহার
C++ এ Exception Handling প্রোগ্রামের নিরবচ্ছিন্ন কার্যক্রম নিশ্চিত করতে গুরুত্বপূর্ণ। এটি ত্রুটি বা ব্যতিক্রম ঘটলে প্রোগ্রামকে বন্ধ না করে ব্যতিক্রমটি ধরতে এবং সমাধান করতে সহায়ক।
tryব্লক ব্যবহার করে ব্যতিক্রম হ্যান্ডলিং শুরু করা হয়।throwব্যবহার করে ব্যতিক্রম ঘটানো হয়।catchব্লক ব্যবহার করে ব্যতিক্রম হ্যান্ডেল করা হয়।
Exception Handling ব্যবহারে প্রোগ্রামের নির্ভরযোগ্যতা বৃদ্ধি পায় এবং এটি প্রোগ্রামকে আরও কার্যকর ও সুরক্ষিত রাখে।
Read more