C ++ में ओवरलोडिंग



यह लेख आपको समझने के लिए उदाहरणों के भार के साथ C ++ में फ़ंक्शन ओवरलोडिंग का विस्तृत और व्यापक ज्ञान प्रदान करेगा।

C ++ उन प्रोग्रामिंग भाषाओं में से एक है जो बहुत ही लचीली है और यह ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग की कई विशेषताओं को भी शामिल करती है। ओवरलोडिंग इस प्रोग्रामिंग भाषा की एक और विशेषता है।निम्नलिखित बिंदुओं को इस 'फंक्शन ओवरलोडिंग सी ++ में' लेख में शामिल किया जाएगा-

C ++ ओवरलोडिंग

जब हम एक ही नाम वाले वर्ग के दो या दो से अधिक सदस्य बनाते हैं लेकिन संख्या या प्रकार के मापदंडों में भिन्न होते हैं, तो इसे C ++ ओवरलोडिंग के रूप में जाना जाता है। C ++ में, हम ओवरलोड कर सकते हैं:





  • तरीके,
  • कंस्ट्रक्टर, और
  • अनुक्रमित गुण

C ++ में ओवरलोडिंग के प्रकार

types-of-overloading-in-c++

C ++ में फ़ंक्शन ओवरलोडिंग क्या है?

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



फ़ंक्शन ओवरलोडिंग का एक प्रमुख लाभ यह है कि यह कार्यक्रम की पठनीयता को बढ़ाता है क्योंकि हमें बार-बार एक ही कार्रवाई के लिए विभिन्न नामों का उपयोग करने की आवश्यकता नहीं है।

तर्क की संख्या को बदलकर

फ़ंक्शन ओवरलोडिंग के इस तरीके में, हम एक ही नाम के साथ दो कार्यों को परिभाषित करते हैं लेकिन एक ही प्रकार के मापदंडों की एक अलग संख्या। उदाहरण के लिए, नीचे दिए गए कार्यक्रम में, हमने दो और तीन पूर्णांकों के योग को वापस करने के लिए दो ऐड () फ़ंक्शन किए हैं।

// पहला फ़ंक्शन परिभाषा int add (int a, int b) {cout<< a+b } // second overloaded function definition int add(int a, int b, int c) { cout << a+b+c }

यहाँ ऐड () फ़ंक्शन को अतिभारित कहा जाता है, क्योंकि इसकी दो परिभाषाएँ हैं, एक जो दो तर्कों को स्वीकार करता है और दूसरी जो तीन तर्कों को स्वीकार करता है। कौन सा ऐड () फ़ंक्शन कहा जाएगा, यह तर्कों की संख्या पर निर्भर करता है।



int main () {add (10, 20) // add () 2 पैरामीटर के साथ ऐड कहा जाएगा (10, 20, 30) // योग () 3 पैरामीटर के साथ कहा जाएगा}
# नामस्थान std int add (int a, int b) {cout का उपयोग करके हटाएं<< a+b <

उपरोक्त उदाहरण में, हम इसके तर्कों की संख्या को बदलकर फ़ंक्शन को जोड़ते हैं। सबसे पहले, हम दो मापदंडों के साथ एक ऐड () फ़ंक्शन को परिभाषित करते हैं, फिर हम ऐड () फ़ंक्शन को फिर से परिभाषित करके इसे फिर से लोड करते हैं लेकिन इस बार तीन मापदंडों के साथ।

तरह-तरह के तर्क देकर

इस पद्धति में, हम एक ही नाम और दो समान मापदंडों के साथ दो या अधिक फ़ंक्शन परिभाषित करते हैं, लेकिन इन मापदंडों के लिए उपयोग किए जाने वाले डेटा प्रकार भिन्न होते हैं। इस कार्यक्रम में उदाहरण के लिए, हमारे पास तीन ऐड () फ़ंक्शन हैं, पहले वाले को दो पूर्णांक तर्क मिलते हैं, दूसरे को दो फ्लोट तर्क मिलते हैं और तीसरे को दो डबल तर्क मिलते हैं।

# नामस्थान std int add (int x, int y) // पहली परिभाषा {cout का उपयोग करके छोड़ दें<< x+y << endl return 0 } float add(float a, float b) { cout << a+b << endl return 0 } double add(double x, double y) { cout << x+y << endl return 0 } int main() { add(20, 40) add(23.45f, 34.5f) add(40.24, 20.433) }

उपरोक्त उदाहरण में, हम तीन बार फ़ंक्शन को जोड़ते हैं। पहला पूर्णांकों को मापदंडों के रूप में, दूसरा मापदंडों के रूप में फ्लोट का उपयोग करके और तीसरा पैरामीटर के रूप में डबल का उपयोग करते हुए।
इस प्रकार हम दो बार ऐड () फ़ंक्शन को ओवरराइड करते हैं।

C ++ में फ़ंक्शन ओवरलोडिंग का लाभ

  • हम अपने प्रोग्राम की मेमोरी स्पेस, स्थिरता और पठनीयता को बचाने के लिए फंक्शन ओवरलोडिंग का उपयोग करते हैं।

  • उपयोग फ़ंक्शन ओवरलोडिंग अवधारणा के साथ, हम एक ही नाम के साथ एक से अधिक फ़ंक्शन विकसित कर सकते हैं

  • फ़ंक्शन ओवरलोडिंग, बहुरूपता के व्यवहार को दर्शाता है जो हमें अलग-अलग व्यवहार प्राप्त करने की अनुमति देता है, हालांकि फ़ंक्शन के समान नाम का उपयोग करके कुछ लिंक होंगे।

    जावा कास्टिंग इंट टू
  • फंक्शन ओवरलोडिंग कार्यक्रम के निष्पादन को गति देता है।

  • फंक्शन ओवरलोडिंग का उपयोग कोड पुन: प्रयोज्य के लिए और मेमोरी को बचाने के लिए भी किया जाता है।

  • यह पैरामीटर के प्रकार के आधार पर वर्ग विधि को लोड करने के लिए आवेदन में मदद करता है।

  • कोड रखरखाव आसान है।

फ़ंक्शन का नुकसान C ++ में ओवरलोडिंग

  • फ़ंक्शन घोषणाएँ जो केवल इसके वापसी प्रकार से भिन्न होती हैं, फ़ंक्शन ओवरलोडिंग प्रक्रिया के साथ अतिभारित नहीं की जा सकती हैं।
  • एक ही पैरामीटर या एक ही नाम प्रकार के साथ सदस्य फ़ंक्शन घोषणाओं को अतिभारित नहीं किया जा सकता है यदि उनमें से किसी एक को स्थिर सदस्य फ़ंक्शन के रूप में घोषित किया गया हो।
  • कक्षा XYZ {स्टैटिक वूड फंक () शून्य फंक () // एरर}

ओवरलोडिंग और अस्पष्टता

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

  • रूपांतरण टाइप करें।
  • डिफ़ॉल्ट तर्कों के साथ कार्य।
  • संदर्भ से एक पास के साथ समारोह

प्रकार रूपांतरण:

# नाम का उपयोग करके नाम स्थान std शून्य फ़ंक्शन (फ्लोट) शून्य फ़ंक्शन (int) शून्य फ़ंक्शन (फ्लोट x) {std :: cout<< 'Value of x is : ' <

उपरोक्त उदाहरण एक त्रुटि फेंकता है - 'अतिभारित फ़ंक्शन (डबल) की कॉल अस्पष्ट है'। फ़ंक्शन (3.4) पहले फ़ंक्शन को कॉल करेगा। फ़ंक्शन (34) हमारी भविष्यवाणी के अनुसार दूसरे फ़ंक्शन को कॉल करता है। लेकिन ऐसा नहीं होता है क्योंकि C ++ में सभी फ्लोटिंग-पॉइंट कॉन्स्टेंट को फ्लोट के रूप में डबल नहीं माना जाता है। यदि हम फ्लोट वेरिएबल को डबल वेरिएबल में बदलते हैं, तो प्रोग्राम ठीक चलेगा। इसलिए हम इसे फ्लोट से डबल में एक प्रकार की रूपांतरण त्रुटि कहते हैं।

डिफ़ॉल्ट तर्क के साथ कार्य:

# नाम का उपयोग करके नाम स्थान std शून्य फ़ंक्शन (int) शून्य फ़ंक्शन (int, int) शून्य फ़ंक्शन (int x) {std :: cout<< 'Value of x is : ' <

उपरोक्त उदाहरण 'ओवरलोडेड int फन (इंट) की कॉल अस्पष्ट' कहकर एक त्रुटि देता है, इसका कारण यह है कि फ़ंक्शन (int y, int z = 12) को दो तरीकों से बुलाया जा सकता है:

हडूप में स्कूप क्या है
  1. फ़ंक्शन को एक तर्क के साथ कॉल करके (और यह स्वचालित रूप से z = 12 का मान लेगा)
  2. दो तर्कों के साथ फ़ंक्शन को कॉल करके।

जब हम फ़ंक्शन को कहते हैं: फ़ंक्शन (12) हम पूर्ण दोनों फ़ंक्शन (इंट) और फ़ंक्शन (इंट, इंट) की स्थिति को भरते हैं इस प्रकार संकलक एक अस्पष्टता में हो जाता है एक त्रुटि दिखाता है।

संदर्भ के साथ पास फंक्शन

# नाम का उपयोग करके नाम स्थान std शून्य फ़ंक्शन (int) शून्य फ़ंक्शन (int &) शून्य फ़ंक्शन (int a) {std :: cout<< 'Value of a is : ' < 

उपरोक्त कार्यक्रम यह कहते हुए एक त्रुटि देता है कि 'अतिभारित of फन (इंट &) की कॉल अस्पष्ट है'। जैसा कि हम देखते हैं कि पहला फ़ंक्शन एक पूर्णांक तर्क लेता है और दूसरा फ़ंक्शन तर्क पैरामीटर को तर्क के रूप में लेता है। इस मामले में, कंपाइलर यह समझने में सक्षम नहीं है कि उपयोगकर्ता को किस फ़ंक्शन की आवश्यकता है क्योंकि मज़ा (इंट) और फ़न (इंट &) के बीच कोई वाक्यात्मक अंतर नहीं है और इस प्रकार यह अस्पष्टता की त्रुटि को दर्शाता है।

इसके साथ, हम C ++ में इस फ़ंक्शन ओवरलोडिंग के अंत में आते हैं। आप और अधिक जानने के लिए चाहते हैं, तो बाहर की जाँच करें Edureka, एक विश्वसनीय ऑनलाइन शिक्षण कंपनी है। एडुर्का के जावा जे 2 ईई और एसओए प्रशिक्षण और प्रमाणन पाठ्यक्रम आपको हाइबरनेट और स्प्रिंग जैसे विभिन्न जावा फ्रेमवर्क के साथ कोर और उन्नत जावा अवधारणाओं दोनों के लिए प्रशिक्षित करने के लिए डिज़ाइन किया गया है।

क्या आप हमसे कोई प्रश्न पूछना चाहते हैं? कृपया इस ब्लॉग के टिप्पणी अनुभाग में इसका उल्लेख करें और हम जल्द से जल्द आपके पास वापस आ जाएंगे।