इस उदाहरण में, आप C ++ में इंक्रीमेंट + और डिक्रीमेंट - ऑपरेटर्स को अधिभारित करना सीखेंगे।
इस उदाहरण को समझने के लिए, आपको निम्नलिखित C ++ प्रोग्रामिंग विषयों का ज्ञान होना चाहिए:
- C ++ क्लासेस और ऑब्जेक्ट्स
- सी ++ कंस्ट्रक्टर्स
- सी ++ ऑपरेटर ओवरलोडिंग
इस ट्यूटोरियल में, इंक्रीमेंट ++ और डिक्लेरेशन - ऑपरेटर को सर्वोत्तम संभव तरीके से अधिभारित किया जाता है, अर्थात, यदि एक ऑपरेटर किसी ऑब्जेक्ट पर काम करता है और 1 द्वारा डेटा सदस्य के मूल्य में कमी करता है, तो 1 से डेटा सदस्य का मान बढ़ाएं - ऑपरेटर प्रयोग किया जाता है।
उदाहरण 1: प्रीफ़िक्स ++ इंक्रीमेंट ऑपरेटर ओवरलोडिंग जिसका कोई रिटर्न प्रकार नहीं है
#include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) void operator ++() ( ++i; ) void Display() ( cout << "i=" << i << endl; ) ); int main() ( Check obj; // Displays the value of data member i for object obj obj.Display(); // Invokes operator function void operator ++( ) ++obj; // Displays the value of data member i for object obj obj.Display(); return 0; )
आउटपुट
i = 0 i = 1
प्रारंभ में जब ऑब्जेक्ट obj घोषित किया जाता है, तो ऑब्जेक्ट obj के लिए डेटा सदस्य i का मान 0 होता है (निर्माता मुझे 0 से प्रारंभ करता है)।
जब ++ ऑपरेटर ओब्ज पर संचालित होता है, तो ऑपरेटर फ़ंक्शन void operator++( )
को लागू किया जाता है जो डेटा सदस्य i से 1 तक के मूल्य को बढ़ाता है।
यह कार्यक्रम इस अर्थ में पूरा नहीं है कि, आप कोड का उपयोग नहीं कर सकते हैं:
obj1 = ++ obj;
यह इसलिए है क्योंकि उपरोक्त कार्यक्रम में ऑपरेटर प्रकार का रिटर्न शून्य है।
यहाँ उपरोक्त कार्यक्रम का थोड़ा संशोधन है ताकि आप कोड का उपयोग कर सकें obj1 = ++obj
।
उदाहरण 2: प्रीफ़िक्स इंक्रीमेंट ++ ऑपरेटर रिटर्न रिटर्न के साथ ओवरलोडिंग
#include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) // Return type is Check Check operator ++() ( Check temp; ++i; temp.i = i; return temp; ) void Display() ( cout << "i = " << i << endl; ) ); int main() ( Check obj, obj1; obj.Display(); obj1.Display(); obj1 = ++obj; obj.Display(); obj1.Display(); return 0; )
आउटपुट
i = 0 i = 0 i = 1 i = 1
यह कार्यक्रम ऊपर वाले के समान है।
एकमात्र अंतर यह है कि, इस प्रकार के ऑपरेटर फ़ंक्शन का रिटर्न इस मामले में चेक किया गया है जो दोनों कोड का उपयोग करने की अनुमति देता है ++obj;
obj1 = ++obj;
। यह इसलिए है, क्योंकि ऑपरेटर फ़ंक्शन से लौटे अस्थायी ऑब्जेक्ट obj में संग्रहीत किया जाता है।
चूंकि, ऑपरेटर फ़ंक्शन का रिटर्न प्रकार चेक है, आप किसी अन्य ऑब्जेक्ट के लिए obj का मान भी असाइन कर सकते हैं।
ध्यान दें कि, = (असाइनमेंट ऑपरेटर) को ओवरलोड करने की आवश्यकता नहीं है क्योंकि यह ऑपरेटर पहले से ही C ++ लाइब्रेरी में ओवरलोडेड है।
उदाहरण 3: पोस्टफिक्स इंक्रीमेंट ++ ऑपरेटर ओवरलोडिंग
इस बिंदु तक वेतन वृद्धि ऑपरेटर का ओवरलोडिंग केवल सही है अगर यह उपसर्ग रूप में उपयोग किया जाता है।
यह उपर्युक्त रूप और उपसर्ग रूप दोनों के लिए इस कार्य को करने के लिए उपरोक्त कार्यक्रम का संशोधन है।
#include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) Check operator ++ () ( Check temp; temp.i = ++i; return temp; ) // Notice int inside barcket which indicates postfix increment. Check operator ++ (int) ( Check temp; temp.i = i++; return temp; ) void Display() ( cout << "i = "<< i <
Output
i = 0 i = 0 i = 1 i = 1 i = 2 i = 1
When increment operator is overloaded in prefix form;
Check operator ++ ()
is called but, when increment operator is overloaded in postfix form; Check operator ++ (int)
is invoked.
Notice, the int inside bracket. This int gives information to the compiler that it is the postfix version of operator.
Don't confuse this int doesn't indicate integer.
Example 4: Operator Overloading of Decrement -- Operator
Decrement operator can be overloaded in similar way as increment operator.
#include using namespace std; class Check ( private: int i; public: Check(): i(3) ( ) Check operator -- () ( Check temp; temp.i = --i; return temp; ) // Notice int inside barcket which indicates postfix decrement. Check operator -- (int) ( Check temp; temp.i = i--; return temp; ) void Display() ( cout << "i = "<< i <
Output
i = 3 i = 3 i = 2 i = 2 i = 1 i = 2
Also, unary operators like: !, ~ etc can be overloaded in similar manner.