ऑपरेटर ओवरलोडिंग क्या है?
ऑपरेटर ओवरलोडिंग C++ में एक महत्वपूर्ण अवधारणा है। यह पॉलीमॉर्फिज्म का एक प्रकार है जिसमें एक ऑपरेटर को ओवरलोड करके उपयोगकर्ता-परिभाषित अर्थ दिया जाता है। ओवरलोडेड ऑपरेटर का उपयोग उपयोगकर्ता-परिभाषित डेटा प्रकार पर ऑपरेशन करने के लिए किया जाता है। उदाहरण के लिए, '+' ऑपरेटर को विभिन्न डेटा प्रकारों पर जोड़ करने के लिए ओवरलोड किया जा सकता है, जैसे पूर्णांक के लिए, स्ट्रिंग के लिए (कंकेटनेशन), आदि।
समस्या
'-' ऑपरेटर को ओवरलोड करके दो संख्याओं का जोड़ करना।
Input: 10 20 20 30 Output: 30 50
व्याख्या
बाइनरी ऑपरेटर्स को एक ऑब्जेक्ट को आर्गुमेंट के रूप में चाहिए ताकि वे ऑपरेशन कर सकें। यदि हम फ्रेंड फंक्शन्स का उपयोग कर रहे हैं तो उन्हें दो आर्गुमेंट्स की आवश्यकता होगी।
ऑपरेटर को इस प्रकार बुलाया जाता है: ob1 - ob2। ऑपरेटर से पहले का ऑब्जेक्ट फंक्शन को इनवोक करेगा और ऑपरेटर के बाद का ऑब्जेक्ट फंक्शन को आर्गुमेंट के रूप में पास किया जाएगा। तो इस मामले में, ob1 इनवोकिंग ऑब्जेक्ट है और ob2 आर्गुमेंट के रूप में पास किया गया है।
हम ob1 के x और y के मान 10, 20 और ob2 के x और y के मान 20, 30 पास कर रहे हैं।
उदाहरण
#include <iostream>
using namespace std;
class Sum {
public:
int x, y;
void getdata(int a, int b) {
x = a;
y = b;
}
void display() {
cout << "\nSum of X: " << x;
cout << "\nSum of Y: " << y;
}
// '-' ऑपरेटर ओवरलोडिंग
void operator-(Sum &ob) {
x = x + ob.x; // घटाने के बजाय जोड़
y = y + ob.y; // घटाने के बजाय जोड़
display();
}
};
int main() {
Sum ob1, ob2;
ob1.getdata(10, 20);
ob2.getdata(20, 30);
ob1 - ob2; // यह वास्तव में जोड़ करेगा!
return 0;
}
आउटपुट
Sum of X: 30 Sum of Y: 50
महत्वपूर्ण बिंदु
- ऑपरेटर ओवरलोडिंग क्लास के अंदर मेंबर फंक्शन के रूप में या बाहर फ्रेंड फंक्शन के रूप में की जा सकती है
- मेंबर फंक्शन के लिए, लेफ्ट ऑपरेंड कॉलिंग ऑब्जेक्ट होता है
- फ्रेंड फंक्शन के लिए, दोनों ऑपरेंड्स पैरामीटर्स के रूप में पास होते हैं
- कुछ ऑपरेटर्स ओवरलोड नहीं किए जा सकते:
::,.*,.,?:,sizeof
व्यावहारिक उपयोग
यह उदाहरण ऑपरेटर ओवरलोडिंग की अवधारणा दिखाने के लिए है। वास्तविक कोड में, '-' ऑपरेटर को जोड़ के लिए ओवरलोड करना भ्रमित करने वाला होगा और अच्छी प्रथा नहीं मानी जाती। ऑपरेटर का अर्थ सहज होना चाहिए।