उदाहरणों के साथ C ++ ऑपरेटर ओवरलोडिंग

विषय - सूची:

Anonim

ऑपरेटर ओवरलोडिंग क्या है?

C ++ में ऑपरेटर ओवरलोडिंग का उपयोग करके , आप एक ऑपरेटर के लिए एक से अधिक अर्थ एक दायरे में निर्दिष्ट कर सकते हैं। ऑपरेटर ओवरलोडिंग का उद्देश्य उपयोगकर्ता-परिभाषित डेटा प्रकार के लिए ऑपरेटर का एक विशेष अर्थ प्रदान करना है।

ऑपरेटर ओवरलोडिंग की मदद से, आप C ++ ऑपरेटरों के बहुमत को फिर से परिभाषित कर सकते हैं। आप एक ऑपरेटर का उपयोग करके विभिन्न कार्यों को करने के लिए ऑपरेटर ओवरलोडिंग का भी उपयोग कर सकते हैं।

इस C ++ ट्यूटोरियल में, आप सीखेंगे:

  • ऑपरेटर ओवरलोडिंग क्या है?
  • वाक्य - विन्यास
  • सी ++ में ऑपरेटर ओवरलोडिंग के लिए विभिन्न दृष्टिकोण
  • क्या सभी C ++ ऑपरेटर्स को ओवरलोड किया जा सकता है?
  • याद रखने वाली चीज़ें:
  • ऑपरेटर ओवरलोडिंग के नियम:
  • ओवरलोड ऑपरेटर को कैसे करें:

वाक्य - विन्यास

C ++ ऑपरेटर को ओवरलोड करने के लिए, आपको कक्षा के अंदर एक विशेष फ़ंक्शन को निम्नानुसार परिभाषित करना चाहिए:

class class_name{… publicreturn_type operator symbol (argument(s)){… }… };

यहाँ उपरोक्त वाक्य रचना के लिए एक स्पष्टीकरण दिया गया है:

  • Function के लिए return_type रिटर्न प्रकार है।
  • अगला, आप ऑपरेटर कीवर्ड का उल्लेख करते हैं।
  • प्रतीक ऑपरेटर के ओवरलोड होने के प्रतीक को दर्शाता है। उदाहरण के लिए, +, -, <, ++।
  • तर्क (ओं) को फ़ंक्शन के रूप में उसी तरह ऑपरेटर फ़ंक्शन को पास किया जा सकता है।

उदाहरण 1:

#include using namespace std;class TestClass {private:int count;public:TestClass() : count(5) {}void operator --() {count = count - 3;}void Display() {cout << "Count: " << count; }};int main() {TestClass tc;--tc;tc.Display();return 0;}

आउटपुट:

यहाँ कोड का एक स्क्रीनशॉट है:

कोड स्पष्टीकरण:

  1. अपने कार्यों का उपयोग करने के लिए हमारे कोड में iostream हेडर फ़ाइल शामिल है।
  2. हमारे प्रोग्राम में std नेमस्पेस को शामिल करें, बिना कॉल किए उसकी कक्षाओं का उपयोग करने के लिए।
  3. TestClass नामक एक क्लास बनाएं।
  4. निजी एक्सेस संशोधक का उपयोग करें, जो एक वर्ग के सदस्य को निजी रूप से सुलभ के रूप में चिह्नित करता है।
  5. एक पूर्णांक चर संख्या बनाएँ। यह चर निजी रूप से सुलभ होगा।
  6. सार्वजनिक पहुंच संशोधक का उपयोग करें, जो एक वर्ग के सदस्य को निजी रूप से सुलभ के रूप में चिह्नित करता है।
  7. वैरिएबल काउंटर को 5 से आरंभ करने के लिए एक क्लास कंस्ट्रक्टर का उपयोग करें।
  8. ओवरऑल का अर्थ - ऑपरेटर।
  9. ऑपरेटर 1 से चर x का मान घटाएगा।
  10. ऑपरेटर ओवरलोडिंग अनुभाग का अंत। ऑपरेटर को एक नया नाम दिया गया है।
  11. प्रदर्शन () फ़ंक्शन नामक फ़ंक्शन को परिभाषित करना।
  12. जब प्रदर्शन () फ़ंक्शन को कॉल किया जाता है, तो कंसोल पर अन्य पाठ के साथ चर गणना के मूल्य को प्रिंट करें। } प्रदर्शन () फ़ंक्शन के मुख्य भाग के अंत को चिह्नित करता है।
  13. वर्ग शरीर का अंत।
  14. मुख्य () फ़ंक्शन को कॉल करें। इस फ़ंक्शन के भीतर प्रोग्राम लॉजिक जोड़ा जाना चाहिए।
  15. क्लास टेस्टक्लास का एक उदाहरण बनाएं और इसे नाम tc दें।
  16. यह शून्य ऑपरेटर - () फ़ंक्शन को कॉल करेगा।
  17. प्रदर्शन () फ़ंक्शन को कॉल करने के लिए TestClass Class के रुख का उपयोग करें।
  18. फ़ंक्शन को सफल समापन पर मान वापस करना चाहिए।
  19. फ़ंक्शन मुख्य के शरीर का अंत ()।

सी ++ में ऑपरेटर ओवरलोडिंग के लिए विभिन्न दृष्टिकोण

आप निम्न प्रकार के कार्यों में से किसी को लागू करके ऑपरेटर ओवरलोडिंग कर सकते हैं:

  1. सदस्य समारोह
  2. गैर-सदस्य समारोह
  3. मित्र का कार्य
  • जब कोई लेफ्ट ऑपरेंड क्लास का ऑब्जेक्ट हो तो ऑपरेटर ओवरलोडिंग फ़ंक्शन एक सदस्य फ़ंक्शन हो सकता है।
  • जब लेफ्ट ऑपरेंड अलग होता है, तो ऑपरेटर ओवरलोडिंग फ़ंक्शन एक गैर-सदस्य फ़ंक्शन होना चाहिए।

यदि आप निजी और संरक्षित वर्ग के सदस्यों का उपयोग करने की आवश्यकता है, तो आप ऑपरेटर को फ़ंक्शन को एक मित्र कार्य कर सकते हैं।

क्या सभी C ++ ऑपरेटर्स को ओवरलोड किया जा सकता है?

नहीं। C ++ ऑपरेटर ऐसे हैं जिन्हें ओवरलोड नहीं किया जा सकता है।

वे सम्मिलित करते हैं:

  • :: -स्कोप रिज़ॉल्यूशन ऑपरेटर
  • ?: -ऑपरेटर ऑपरेटर।
  • । -मेम्बर सेलेक्टर
  • Sizeof ऑपरेटर
  • * -माइंटर पॉइंटर सेलेक्टर

याद रखने वाली चीज़ें:

  1. ऑपरेटर ओवरलोडिंग के साथ, आप जिस तरह से एक ऑपरेटर केवल उपयोगकर्ता द्वारा परिभाषित प्रकारों (वस्तुओं, संरचनाओं) के लिए काम करता है को फिर से परिभाषित कर सकते हैं। आप इसे अंतर्निहित प्रकारों (फ्लोट, चार, इंट, आदि) के लिए उपयोग नहीं कर सकते।
  2. = और & C ++ ऑपरेटर्स डिफ़ॉल्ट रूप से ओवरलोड हैं। उदाहरण के लिए, आप उसी श्रेणी की वस्तुओं को सीधे = ऑपरेटर के उपयोग से कॉपी कर सकते हैं।
  3. ऑपरेटर पूर्वता ऑपरेटरों के साहचर्य और पूर्वता को नहीं बदलता है। हालाँकि, आप कोष्ठक का उपयोग करके मूल्यांकन के क्रम को बदल सकते हैं।
  4. चार ऑपरेटर हैं जिन्हें आप C ++ में अधिभार नहीं दे सकते हैं। वे गुंजाइश रिज़ॉल्यूशन ऑपरेटर (: :), सदस्य चयन ऑपरेटर (?), एक चयनकर्ता के माध्यम से फ़ंक्शन ऑपरेटर (*?), और टर्नरी ऑपरेटर (:)? :) के लिए सदस्य चयन शामिल हैं।

ऑपरेटर ओवरलोडिंग के नियम:

यहाँ ऑपरेटर ओवरलोडिंग के नियम हैं:

  • काम करने के लिए, कम से कम एक ऑपरेंड उपयोगकर्ता-परिभाषित क्लास ऑब्जेक्ट होना चाहिए।
  • आप केवल मौजूदा ऑपरेटरों को अधिभारित कर सकते हैं। आप नए ऑपरेटरों को अधिभार नहीं दे सकते।
  • कुछ ऑपरेटरों को एक फ्रेंड फंक्शन का उपयोग करके ओवरलोड नहीं किया जा सकता है। हालांकि, ऐसे ऑपरेटरों को सदस्य फ़ंक्शन का उपयोग करके ओवरलोड किया जा सकता है।

ओवरलोड ऑपरेटर को कैसे करें:

उदाहरण 1:

#include using namespace std;class OperatorOverload {private:int x;public:OperatorOverload() : x(10) {}void operator ++() {x = x + 2;}void Print() {cout << "The Count is: " << x;}};int main() {OperatorOverload ov;++ov;ov.Print();return 0;}

आउटपुट:

यहाँ कोड का एक स्क्रीनशॉट है:

कोड स्पष्टीकरण:

  1. अपने कार्यों का उपयोग करने के लिए हमारे कोड में iostream हेडर फ़ाइल शामिल है।
  2. हमारे प्रोग्राम में std नेमस्पेस को शामिल करें, बिना कॉल किए उसकी कक्षाओं का उपयोग करने के लिए।
  3. OperatorOverload नाम की एक क्लास बनाएं।
  4. निजी एक्सेस संशोधक का उपयोग करें, जो एक वर्ग के सदस्य को निजी रूप से सुलभ के रूप में चिह्नित करता है।
  5. एक पूर्णांक चर x बनाएँ। यह चर निजी रूप से सुलभ होगा।
  6. सार्वजनिक पहुंच संशोधक का उपयोग करें, जो एक वर्ग के सदस्य को निजी रूप से सुलभ के रूप में चिह्नित करता है।
  7. वैरिएबल x को 10 से आरंभ करने के लिए एक क्लास कंस्ट्रक्टर का उपयोग करें।
  8. ++ ऑपरेटर का अर्थ अधिभार।
  9. ऑपरेटर 2 के साथ चर x का मान बढ़ाएगा।
  10. ऑपरेटर ओवरलोडिंग अनुभाग का अंत। ऑपरेटर को एक नया नाम दिया गया है।
  11. प्रिंट () फ़ंक्शन को कॉल करना।
  12. जब प्रिंट () फ़ंक्शन कहा जाता है, तो कंसोल पर अन्य पाठ के साथ चर x का मान प्रिंट करें।
  13. प्रिंट () फ़ंक्शन के शरीर का अंत।
  14. वर्ग शरीर का अंत।
  15. मुख्य () फ़ंक्शन को कॉल करें। इस फ़ंक्शन के भीतर प्रोग्राम लॉजिक जोड़ा जाना चाहिए।
  16. ओवेर नाम के OperatorOverload क्लास का एक उदाहरण बनाएं।
  17. यह शून्य ऑपरेटर ++ () फ़ंक्शन को कॉल करेगा।
  18. Print () फ़ंक्शन को कॉल करने के लिए OperatorOverload वर्ग के रुख का उपयोग करें।
  19. फ़ंक्शन को सफल समापन पर मान वापस करना चाहिए।
  20. फ़ंक्शन मुख्य के शरीर का अंत ()।

उदाहरण 2:

#includeusing namespace std;class TestClass {private:int real, over;public:TestClass(int rl = 0, int ov = 0) {real = rl;over = ov;}TestClass operator + (TestClass const &obj) {TestClass result;result.real = real + obj.real;result.over = over + obj.over;return result;}void print() {cout << real << " + i" << over << endl;}};int main(){TestClass c1(9, 5), c2(4, 3);TestClass c3 = c1 + c2;c3.print();}

आउटपुट:

यहाँ कोड का एक स्क्रीनशॉट है:

कोड स्पष्टीकरण:

  1. अपने कार्यों का उपयोग करने के लिए हमारे कार्यक्रम में iostream हेडर फ़ाइल शामिल करना।
  2. हमारे प्रोग्राम में std नेमस्पेस शामिल करें ताकि बिना कॉल किए उसकी कक्षाओं का उपयोग किया जा सके।
  3. TestClass नामक एक क्लास बनाएं। {वर्ग शरीर की शुरुआत के निशान।
  4. वैरिएबल को निजी के रूप में चिह्नित करने के लिए निजी एक्सेस संशोधक का उपयोग करें, जिसका अर्थ है कि उन्हें केवल कक्षा के भीतर से एक्सेस किया जा सकता है।
  5. वास्तविक और अधिक दो पूर्णांक चर को परिभाषित करें।
  6. कंस्ट्रक्टर को सार्वजनिक रूप से चिह्नित करने के लिए सार्वजनिक पहुंच संशोधक का उपयोग करें, जिसका अर्थ है कि यह कक्षा के बाहर भी सुलभ होगा।
  7. क्लास कंस्ट्रक्टर बनाना और वैरिएबल को इनिशियलाइज़ करना।
  8. वैरिएबल रियल के मूल्य को आरम्भ करें।
  9. वैरिएबल ओवर का मान आरंभ करें।
  10. कंस्ट्रक्टर बॉडी का अंत।
  11. + ऑपरेटर के अर्थ को ओवरराइड करें।
  12. प्रकार TestClass का डेटा प्रकार परिणाम बनाएँ।
  13. जटिल संख्या के साथ + ऑपरेटर का उपयोग करें। यह रेखा किसी संख्या के वास्तविक भाग को किसी अन्य संख्या के वास्तविक भाग से जोड़ेगी।
  14. जटिल संख्या के साथ + ऑपरेटर का उपयोग करें। यह रेखा किसी संख्या के काल्पनिक भाग को किसी अन्य संख्या के काल्पनिक भाग से जोड़ेगी।
  15. कार्यक्रम सफल निष्पादन पर चर परिणाम का मूल्य लौटाएगा।
  16. + ऑपरेटर के नए अर्थ की परिभाषा का अंत, अर्थात्, ओवरलोडिंग।
  17. कॉल प्रिंट () विधि।
  18. कंसोल पर जोड़ने के बाद नया कॉम्प्लेक्स नंबर प्रिंट करें।
  19. प्रिंट के शरीर का अंत () फ़ंक्शन।
  20. टेस्टक्लास क्लास के शरीर का अंत।
  21. मुख्य () फ़ंक्शन को कॉल करना।
  22. वास्तविक और जटिल दोनों भागों के मूल्यों को जोड़ना। C1 के पहले भाग को c2 के पहले भाग में जोड़ा जाएगा, अर्थात 9 + 4। C1 के दूसरे भाग को c के दूसरे भाग में जोड़ा जाएगा, अर्थात 5 + 3।
  23. ओवरलोडेड + ऑपरेटर का उपयोग करके एक ऑपरेशन करना और परिणाम को चर c3 में संग्रहीत करना।
  24. कंसोल पर वेरिएबल c3 के मान को प्रिंट करना।
  25. मुख्य () फ़ंक्शन के शरीर का अंत।

सारांश:

  • आप एक दायरे में C ++ ऑपरेटर के लिए एक से अधिक अर्थ निर्दिष्ट कर सकते हैं।
  • इसे ऑपरेटर ओवरलोडिंग कहा जाता है।
  • ऑपरेटर ओवरलोडिंग उपयोगकर्ता-परिभाषित डेटा प्रकार के लिए ऑपरेटर का एक विशेष अर्थ प्रदान करता है।
  • आप ऑपरेटर ओवरलोडिंग के माध्यम से C ++ ऑपरेटरों के बहुमत को फिर से परिभाषित कर सकते हैं।
  • सभी C ++ ऑपरेटर्स को ओवरलोड नहीं किया जा सकता है।
  • एक ऑपरेटर को अधिभारित करने के लिए, कम से कम एक ऑपरेंड उपयोगकर्ता-निर्धारित ऑब्जेक्ट होना चाहिए।
  • केवल मौजूदा ऑपरेटरों को ही ओवरलोड किया जा सकता है। आप नए ऑपरेटरों को अधिभार नहीं दे सकते।