অপারেটর ওভারলোডিং (Operator Overloading) C++ এ একটি বৈশিষ্ট্য, যা দিয়ে আমরা ইউজার-ডিফাইন্ড ডেটা টাইপের (যেমন, ক্লাস) জন্য সাধারণ অপারেটরগুলোর কাস্টম ব্যবহার সংজ্ঞায়িত করতে পারি। উদাহরণস্বরূপ, +, -, *, == ইত্যাদি অপারেটরগুলো সাধারণত প্রাথমিক ডেটা টাইপের উপর কাজ করে, কিন্তু আমরা এগুলোকে কাস্টম অবজেক্টের জন্যও ব্যবহারযোগ্য করতে পারি।
অপারেটর ওভারলোডিং কেন ব্যবহার করা হয়?
- ইউজার-ডিফাইন্ড ডেটা টাইপের জন্য সাধারণ অপারেটর ব্যবহার: যেমন, দুটি কমপ্লেক্স সংখ্যা যোগ করা বা দুটি পয়েন্ট যোগ করা।
- কোড আরও সহজ এবং সরল করা: অপারেটর ওভারলোডিংয়ের মাধ্যমে সহজ ভাষায় কোড লেখা যায়।
- কোড পুনরায় ব্যবহারযোগ্যতা বৃদ্ধি: অপারেটর ওভারলোডিং কাস্টম ডেটা টাইপের উপর বিভিন্ন অপারেশন পরিচালনা করা সহজ করে তোলে।
অপারেটর ওভারলোডিং এর নিয়ম
- নতুন অপারেটর তৈরি করা যায় না: শুধুমাত্র বিদ্যমান অপারেটরগুলোই ওভারলোড করা যায়।
- অপারেটরের ডিফল্ট অর্থ পরিবর্তন করা যাবে না: উদাহরণস্বরূপ,
+অপারেটরকে বিয়োগফলের জন্য ব্যবহার করা যাবে না। - কমপক্ষে একটি অপারেন্ড ইউজার-ডিফাইন্ড টাইপ হতে হবে: অর্থাৎ, যদি
intএবংfloatএর মত প্রাথমিক ডেটা টাইপ ব্যবহার করা হয়, তবে সেগুলোর জন্য অপারেটর ওভারলোড করা যাবে না।
কাস্টম অপারেটর ডেফিনিশন
অপারেটর ওভারলোডিং করার জন্য সাধারণত operator কীওয়ার্ড ব্যবহার করা হয়। অপারেটরের ডেফিনিশন ক্লাসের সদস্য ফাংশন হিসেবে করা যেতে পারে বা বন্ধু (friend) ফাংশন হিসেবে ডিফাইন করা যেতে পারে।
উদাহরণ ১: + অপারেটর ওভারলোড করে দুটি Complex অবজেক্ট যোগ করা
#include <iostream>
using namespace std;
class Complex {
private:
float real;
float imag;
public:
Complex(float r = 0, float i = 0) : real(r), imag(i) {}
// + অপারেটর ওভারলোড করা
Complex operator + (const Complex &c) {
Complex temp;
temp.real = real + c.real;
temp.imag = imag + c.imag;
return temp;
}
// কমপ্লেক্স সংখ্যা প্রদর্শন
void display() const {
cout << real << " + " << imag << "i" << endl;
}
};
int main() {
Complex c1(3.5, 2.5);
Complex c2(1.5, 3.0);
Complex c3 = c1 + c2; // + অপারেটর ওভারলোড ব্যবহার করে যোগফল নির্ণয়
cout << "Complex number 1: ";
c1.display();
cout << "Complex number 2: ";
c2.display();
cout << "Sum: ";
c3.display();
return 0;
}
বর্ণনা:
- এখানে
Complexক্লাসে+অপারেটর ওভারলোড করা হয়েছে। operator +ফাংশনটিComplexঅবজেক্ট গ্রহণ করে এবং রিয়েল ও ইমাজিনারি অংশ যোগ করে নতুনComplexঅবজেক্ট ফেরত দেয়।
আউটপুট:
Complex number 1: 3.5 + 2.5i
Complex number 2: 1.5 + 3.0i
Sum: 5.0 + 5.5i
উদাহরণ ২: == অপারেটর ওভারলোড করে দুটি Complex অবজেক্ট তুলনা করা
#include <iostream>
using namespace std;
class Complex {
private:
float real;
float imag;
public:
Complex(float r = 0, float i = 0) : real(r), imag(i) {}
// == অপারেটর ওভারলোড করা
bool operator == (const Complex &c) const {
return (real == c.real && imag == c.imag);
}
void display() const {
cout << real << " + " << imag << "i" << endl;
}
};
int main() {
Complex c1(3.5, 2.5);
Complex c2(3.5, 2.5);
Complex c3(1.0, 1.0);
if (c1 == c2) {
cout << "c1 and c2 are equal." << endl;
} else {
cout << "c1 and c2 are not equal." << endl;
}
if (c1 == c3) {
cout << "c1 and c3 are equal." << endl;
} else {
cout << "c1 and c3 are not equal." << endl;
}
return 0;
}
বর্ণনা:
- এখানে
==অপারেটর ওভারলোড করা হয়েছে, যা দুটিComplexঅবজেক্টের রিয়েল এবং ইমাজিনারি অংশের সমতা যাচাই করে। c1 == c2এবংc1 == c3চেক করা হয়েছে।
আউটপুট:
c1 and c2 are equal.
c1 and c3 are not equal.
উদাহরণ ৩: ++ অপারেটর ওভারলোড (প্রিফিক্স এবং পোস্টফিক্স)
#include <iostream>
using namespace std;
class Counter {
private:
int count;
public:
Counter(int c = 0) : count(c) {}
// প্রিফিক্স ++ অপারেটর ওভারলোড
Counter& operator++() {
++count;
return *this;
}
// পোস্টফিক্স ++ অপারেটর ওভারলোড
Counter operator++(int) {
Counter temp = *this;
count++;
return temp;
}
void display() const {
cout << "Count: " << count << endl;
}
};
int main() {
Counter c1(5);
++c1; // প্রিফিক্স ++
c1.display();
c1++; // পোস্টফিক্স ++
c1.display();
return 0;
}
বর্ণনা:
- এখানে
++অপারেটর প্রিফিক্স এবং পোস্টফিক্স ফর্মে ওভারলোড করা হয়েছে।- প্রিফিক্স
++অপারেটরের জন্যoperator++()মেথড ব্যবহার করা হয়েছে। - পোস্টফিক্স
++অপারেটরের জন্যoperator++(int)মেথড ব্যবহার করা হয়েছে।
- প্রিফিক্স
আউটপুট:
Count: 6
Count: 7
কিছু সাধারণ অপারেটর এবং তাদের ওভারলোডিং
| অপারেটর | উদ্দেশ্য | ওভারলোডিং সম্ভব |
|---|---|---|
+ | যোগফল | হ্যাঁ |
- | বিয়োগফল | হ্যাঁ |
* | গুণফল | হ্যাঁ |
== | সমতা যাচাই | হ্যাঁ |
++ | ইনক্রিমেন্ট | হ্যাঁ |
-- | ডিক্রিমেন্ট | হ্যাঁ |
[] | অ্যারের ইন্ডেক্স অ্যাক্সেস | হ্যাঁ |
অপারেটর ওভারলোডিংয়ের সুবিধা
- ইউজার-ডিফাইন্ড ডেটা টাইপের জন্য সাধারণ অপারেটর ব্যবহার: অপারেটর ওভারলোডিংয়ের মাধ্যমে ইউজার-ডিফাইন্ড ডেটা টাইপের উপর সহজেই অপারেশন করা যায়।
- কোড সংক্ষিপ্ত ও সহজ: ওভারলোডিংয়ের মাধ্যমে জটিল কোডকে সরল করা যায়।
- পলিমরফিজম: অপারেটর ওভারলোডিং পলিমরফিজমের একটি উদাহরণ, যা প্রোগ্রামকে নমনীয় করে তোলে।
সারসংক্ষেপ
- অপারেটর ওভারলোডিং C++ এ ইউজার-ডিফাইন্ড ডেটা টাইপের জন্য সাধারণ অপারেটরের ব্যবহারকে কাস্টমাইজ করার একটি পদ্ধতি।
- এটি
operatorকীওয়ার্ড ব্যবহার করে সংজ্ঞায়িত করা হয় এবং ক্লাসের মেম্বার বা ফ্রেন্ড ফাংশন হিসেবে ডিফাইন করা যায়। - অপারেটর ওভারলোডিংয়ের মাধ্যমে কোডকে আরও কার্যকরী, সহজ এবং পড়তে সুবিধাজনক করা যায়।
Content added By
Read more