Default Parameters and Function Overloading (Contd.) (Lecture 13)-fc2SjmrP67A 50 KB
Newer Older
Vandan Mujadia's avatar
Vandan Mujadia committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
C ++ में प्रोग्रामिंग मे मॉड्यूल(module) 8 में आपका स्वागत है।
 हम पहले भाग में इस मॉड्यूल(module) पर चर्चा कर रहे हैं और हमने डिफ़ॉल्ट(default) पैरामीटर्स(parameters) के बारे में बात की है।
 अब, हम फंक्शन(function) को ओवरलोडिंग(overloading) पर चर्चा करना शुरू करेंगे।
 फंक्शन(function) ओवरलोडिंग(overloading) को समझने के लिए, हम सबसे पहले यह बताने के लिए एक उदाहरण लेंगे कि आखिर फंक्शन(function) ओवरलोडिंग(overloading) जैसी किसी चीज की आवश्यकता क्यों होती है और इसका क्या मतलब हो सकता है।
 तो, यहाँ एक उदाहरण है C. यह मैट्रिसेस को गुणा करने के लिए एक उदाहरण है, मेट्रिसेस के साथ वैक्टर को गुणा करें या स्वयं डॉक्टर्स को गुणा करें।
 इसलिए, यदि आप यहां दी गई परिभाषाओं को थोड़ा ध्यान से देखते हैं, तो पहले हम तीन प्रकारों को परिभाषित करते हैं, ये अन्य हैं।
 मैट्रिक्स(matrix) एक दो-आयामी(dimensional) स्कूयारे(square) मैट्रिक्स(matrix) है जिसे हमने इस उदाहरण में यहां लिया है।
 फिर, दूसरे VecRow में।
 इसमें VecRow एक पंक्ति वेक्टर है और VecCol एक कॉलम वेक्टर है।
 तो, आप इन्हें समझ सकते हैं।
 ये आप इस पर देख सकते हैं।
 तो, ये तीन प्रकार हैं और फिर, हम जो चाहते हैं, वह जहां कहीं भी मैट्रिक्स(matrix) गुणा के नियमों द्वारा परिभाषित किया गया है, हम उन्हें गुणा करने के लिए फंक्शन(function) लिखना चाहते हैं।
 पहला फंक्शन(function) दो मैट्रिक्स(matrix) को गुणा करता है और परिणाम मैट्रिक्स(matrix) लौटाता है।
 आप आसानी से देख सकते हैं कि Mat a ; एक वर्ग(square) मैट्रिक्स(matrix) है, ‘Mat b' एक और वर्ग(square) मैट्रिक्स(matrix) है और दोनों का आकार 10 है।
 इसलिए, यदि मैं उन्हें गुणा करता हूँ, तो मुझे परिणामस्वरूप एक और वर्ग(square) मैट्रिक्स(matrix) c मिलेगा।
 नियम और आप समझते हैं कि जब से हम सी में यह लिख रहे हैं, मूल्य से कॉल, हमें इस फंक्शन(function) से आउटपुट प्राप्त करने के लिए पॉइंटर्स का उपयोग करने की आवश्यकता है।
 अब, मान लीजिए कि मैं भी एक गुणन को परिभाषित करना चाहता हूं जो कि दूसरा है जो एक वर्ग(square) मैट्रिक्स(matrix) ‘a’;और एक कॉलम वेक्टर ‘बी' के बीच है।
 अगर मैं ऐसा करता हूं, तो स्वाभाविक रूप से मुझे एक कॉलम वेक्टर सी मिलेगा।
 अब, यदि हम उन नियमों पर पुनरावृत्ति कर सकते हैं जिनके द्वारा हम matrices को गुणा करते हैं, पंक्ति स्तंभ तंत्र जो आप सभी जानते हैं और मुझे यहाँ विस्तृत करने की आवश्यकता नहीं है।
 आपको पता चल जाएगा कि दो मैट्रिक्स(matrix) को गुणा करने या मैट्रिक्स(matrix) को गुणा करने या समान आकार के एक कॉलम वेक्टर के साथ एक वर्ग(square) मैट्रिक्स(matrix) को गुणा करने के बाद शायद ही कोई अंतर होता है।
 केवल आपका परिणाम होने से अंतर कॉलम वेक्टर होगा और यदि आप आगे बढ़ते हैं, अगर हम तीसरे में देखते हैं, तो यह एक पंक्ति वेक्टर द्वारा मैट्रिक्स(matrix) का पूर्व-गुणन है।
 यदि आप चौथे में देखते हैं, तो यह एक पंक्ति वेक्टर द्वारा एक स्तंभ वेक्टर का गुणन है जहां परिणाम एक वर्ग(square) मैट्रिक्स(matrix) हो जाता है और पांचवें में, आपको c मिलता है, एक स्तंभ वेक्टर द्वारा पंक्ति वेक्टर का गुणन जो मुड़ता है एकल मूल्य होना।
 अब, यह सब गुणा के लिए समान एल्गोरिथ्म का अनुसरण करता है, लेकिन अगर मैं उन्हें व्यक्त करना चाहता हूं, तो उन्हें सी भाषा में कोड करें, मुझे सभी अलग-अलग नाम प्रदान करने की आवश्यकता होगी।
 यदि आप इस भाग को देखते हैं, तो मुझे इन कार्यों को सभी अलग-अलग नाम प्रदान करने की आवश्यकता है क्योंकि वे अलग-अलग कार्य हैं।
 वे विभिन्न प्रकार के लेते हैं, वे सभी तीन तर्क लेते हैं क्योंकि वैचारिक रूप यह a और b मेट्रिसेस लेते हैं और गुणा करते हैं और आपको परिणाम देते हैं ‘c'।
 लेकिन चूंकि ये सभी अलग-अलग प्रकार के हैं, इसलिए मुझे इस फंक्शन(function) को दिए गए अलग-अलग नाम रखने की आवश्यकता है और जब मैं उपयोग कर रहा हूं, मुझे न केवल यह समझने की आवश्यकता है कि मैं किन अलग पैरामीटर्स(parameters) से गुजर रहा हूं, बल्कि इसके विपरीत अर्थात 'rv' एक पंक्ति वेक्टर एम2(m2) एक मैट्रिक्स(matrix) है।
 इसलिए, मुझे यह याद रखना होगा कि, यदि मैं एक पंक्ति वेक्टर और एक मैट्रिक्स(matrix) का उपयोग कर रहा हूं, तो फंक्शन(function) का मेरा नामmultiply_VR_M 'या कुछ इसी तरह का होना चाहिए।
 जबकि अगर मैं किसी कॉलम वेक्टर द्वारा पंक्ति वेक्टर का गुणन कर रहा हूं, तो फंक्शन(function) का नाम कुछ अलग होना चाहिए जैसे कि Multiply_VR_VC।
 इसलिए, यदि आप इन टिप्पणियों को संक्षेप में प्रस्तुत करते हैं, तो आप जो समझते हैं वह पांच गुणा कार्य है जो हम यहां दिखाते हैं, उसी कार्यक्षमता को साझा करते हैं।
 उनके पास एक ही एल्गोरिदम है, लेकिन बस उनके पास पांच अलग-अलग प्रकार के तर्क प्रकार और परिणाम प्रकार हैं और परिणामस्वरूप सी को उन्हें पांच अलग-अलग कार्यों के रूप में व्यवहार करने की आवश्यकता है।
 अब, सी ++ सौभाग्य से इस स्थिति के लिए एक सुरुचिपूर्ण समाधान है, जहां विभिन्न कार्यों में समान कार्यक्षमता होती है शायद वे एक ही एल्गोरिथ्म का उपयोग करते हैं या शायद वे एक ही एल्गोरिदम के थोड़े भिन्न रूपों का उपयोग करते हैं, लेकिन निश्चित रूप से विभिन्न प्रकार के डेटा प्रकारों से निपटना पड़ता है।
 तर्क अब उनके फंक्शन(function) नाम को साझा कर सकते हैं और पूरे प्रोग्रामिंग अभ्यास को बहुत आसान बना सकते हैं।
 तो, एक ही उदाहरण के साथ जारी रखने के लिए, अब यह फिर से C ++ में कोडित किया गया है।
 बस प्रमुख अंतरों को देखें।
 पहले अगर आप टाइपडिफ(typedef) में देखते हैं, तो वे समान हैं।
 हम उसी प्रकार के साथ काम कर रहे हैं।
 यदि आप पांच कार्यों को देखते हैं, तो हमारे पास समान कार्य हैं जहां तक कार्यक्षमता का संबंध है, जो कि पहला है, अभी भी दो मैट्रिक्स(matrix) को गुणा करता है, दूसरा एक मैट्रिक्स(matrix) को गुणा करता है, पोस्ट एक मैट्रिक्स(matrix) और एक वेक्टर के साथ मैट्रिक्स(matrix) को गुणा करता है।
 लेकिन अगर आप नामों पर गौर करते हैं, तो आपको कुछ अलग दिखाई देता है।
 आप देखते हैं कि उन सभी का नाम समान है, कुछ ऐसा जो आप सी में नहीं कर सकते थे।
 सी में हम औपचारिक रूप से कहते हैं कि फंक्शन(function) नाम वैश्विक(global) हैं।
 ये वैश्विक(global) प्रतीक हैं।
 इसलिए, पूरे C प्रोग्राम में, चाहे आप कितनी भी फाइलें लिखें, इत्यादि, लेकिन पूरे प्रोग्राम में, जो कि एक यूनिट से एक मेन तक एक यूनिट के रूप में चलेगा, हर फंक्शन(function) का नाम अलग-अलग होना चाहिए, हर समारोह का नाम।
 प्रत्येक अलग-अलग फंक्शन(function) के लिए केवल एक फंक्शन(function) नाम हो सकता है जिसे आप प्रोग्राम के लिए लिखते हैं, लेकिन यहां आप देख सकते हैं कि हमारे पास एक ही नाम साझा करने के लिए पांच अलग-अलग फंक्शन(function) हैं, लेकिन निश्चित रूप से जब आप यहां जैसे उनके पैरामीटर्स(parameters) को देखते हैं, तो सभी पैरामीटर आप पाएंगे कि उनमें से कोई भी दो समान पैरामीटर्स(parameters) का सेट नहीं है।
 उन्हें वास्तव में ज़रूरत नहीं है, क्योंकि जो पहले गुणा को अलग करता है जो दो मैट्रिक्स(matrix) को गुणा करता है और दूसरे फंक्शन(function) से दूसरे वर्ग(square) मैट्रिक्स(matrix) के माध्यम से देता है जो पोस्ट वेक्टर को एक कॉलम वेक्टर के साथ गुणा करता है एक कॉलम वेक्टर या तीसरा जो पूर्व-गुणकों को देता है एक पंक्ति वेक्टर के साथ मैट्रिक्स(matrix) एक पंक्ति वेक्टर देने के लिए।
 उन सभी के पास तर्कों के लिए विभिन्न भिन्न, उनके संबंधित अलग-अलग डेटा प्रकार हैं।
 अब उस छोटी सी चीज के साथ जो हमने किया है, हमने मॉड्यूल(module) 6 और 7 में सीखा है कि हमने बड़ी वस्तुओं पर संदर्भ मेट्रिसेस द्वारा कॉल का उपयोग करना सीखा है।
 इसलिए, आप उन्हें मान के रूप में पारित करना और उन्हें कॉपी करना नहीं चाहेंगे, बल्कि हम उन्हें संदर्भ के रूप में पारित करना चाहते हैं और यह सुनिश्चित करना चाहते हैं कि फंक्शन(function) के भीतर इनपुट मैट्रिसेस या वैक्टर नहीं हैं।
 हम उन पैरामीटर्स(parameters) को निरंतर बनाते हैं, जबकि आउटपुट पक्ष पर हम केवल संदर्भ तंत्रों द्वारा कॉल का उपयोग करते हैं, ताकि हमें उस अप्रत्यक्ष सूचक भाग की आवश्यकता न हो, लेकिन यह केवल नोट करने के लिए बिंदुओं के साथ विस्तार की बात है एक ही नाम और इन सभी पांचों को संबंधित वास्तविक पैरामीटर्स(parameters) द्वारा एक ही नाम के साथ उपयोग किया जा सकता है।
 तो, क्या होता है मान लीजिए मैं एक कॉलम वेक्टर के साथ मैट्रिक्स(matrix) का एक पोस्ट गुणा करने की कोशिश कर रहा हूं, इसलिए मेरे पास एक मैट्रिक्स(matrix) m1 है, मेरे पास एक कॉलम वेक्टर ‘cv' है और अगर मैं उन्हें गुणा करूं, तो मुझे क्या करना चाहिए? मुझे एक कॉलम वेक्टर मिलना चाहिए।
 तो, मान लीजिए कि मैं परिणाम के रूप में कॉलम वेक्टर ‘rcv’ की अपेक्षा कर रहा हूं।
 इसलिए, मैं जो कहता हूं वह सिर्फ गुणा करता हूं; मैंने ‘m1’ को मैट्रिक्स(matrix) के रूप में, ’cv'को एक कॉलम वेक्टर के रूप में और ‘rcv’ को अपने परिणाम मैट्रिक्स(matrix) के रूप में रखा।
 अब, किसी तरह इसका मतलब है कि अगर मैं ऐसा करता हूं और मुझे उस विशेष कार्य को उचित रूप से कॉल करना चाहिए जो कि गुणा करता है; पोस्ट एक वेक्टर के साथ एक वर्ग(square) मैट्रिक्स(matrix) को गुणा करता है।
 इसलिए, बहुत दिलचस्प बात अगर आप इस फंक्शन(function) में इन पैरामीटर्स(parameters) को निर्दिष्ट करते हैं, तो दिलचस्प रूप से यह वास्तव में इस फंक्शन(function) को कॉल करेगा।
 हालाँकि, पाँच कार्य हैं, उनमें से सभी को बहुली कहा जाता है और मैं इस फंक्शन(function) को भी गुणा कह रहा हूं, लेकिन किसी तरह, मैं पैरामीटर्स(parameters) को देखते हुए समझने में सक्षम हो जाऊंगा, उन पैरामीटर्स(parameters) के प्रकार जिन्हें मैं वास्तव में दूसरे फंक्शन(function) में दिलचस्पी लेता हूं जिनके साथ इन पैरामीटर्स(parameters) के प्रकार, इस पैरामीटर का प्रकार मैट है जो यहां से मेल खाता है, दूसरे पैरामीटर का प्रकार पैरामीटर है ‘cv’ ‘VecCol' है जो यहाँ से मेल खाता है और तीसरे पैरामीटर के प्रकार rcv फिर से ‘VecCol’ है यहाँ मेल खाता है।
 हम पाते हैं कि यह 5 में से एकमात्र फंक्शन(function) है, जहां ये 3 पैरामीटर उनके प्रकार में मेल खाते हैं और संकलक तदनुसार इस विशेष आह्वान से दूसरे फंक्शन(function) को यहां कॉल करने में सक्षम होंगे।
 इसी तरह, अगर मैं इस पर गौर करता हूं, तो इन 3 पैरामीटर्स(parameters) के प्रकारों के आधार पर, कंपाइलर(compiler) वास्तव में इस फंक्शन(function) को कॉल करने में सक्षम होगा, क्योंकि rv 'VecRow’ है, ‘आरसीवी` `VecCol’ है और r इंट है ।
 ‘आरवी’, ‘सीवी', ‘आर’ ,‘VecRow', `VecCol’, इंट केवल विशेष रूप से अंतिम फंक्शन(function) को बुलाएगा जो कि वास्तव में काम करेगा।
 तो, इन 5 कार्यों के विभिन्न तर्क प्रकार हैं, लेकिन उन्हें C ++ में एक सामान्य नाम वाले एक फंक्शन(function) के रूप में माना जाता है और यह सुविधा बहुत शक्तिशाली है, और जो हमें बहुत सारी चीजें करने में सक्षम करेगी जिसे फंक्शन(function) ओवरलोडिंग(overloading) कहा जाता है या जैसा कि हम करेंगे धीरे-धीरे एक वैकल्पिक नाम को समझें, इसके लिए अधिक औपचारिक नाम स्थिर बहुरूपता(polymorphism) है।
 इसलिए, हमने सिर्फ इस बात की प्रेरणा देखी कि फंक्शन(function) ओवरलोडिंग(overloading) आसान क्यों होगी।
 हमने देखा कि जिस स्थिति में हमें पांच अलग-अलग फ़ंक्शनों को पाँच अलग-अलग फंक्शन(function) देने थे, जबकि उनकी मुख्य कार्यक्षमता, कोर एल्गोरिथ्म अभी भी एक ही है और हमें इन सभी नामों को अलग-अलग याद रखना होगा, हम C ++ में फंक्शन(function) को केवल एक ही उपयोग करने के लिए ओवरलोडिंग(overloading) का उपयोग कर सकते हैं नाम और हमारे कॉल या फंक्शन(function) के उपयोग के आधार पर, उपयुक्त फंक्शन(function) को उपयुक्त फंक्शन(function) कहा जाएगा जो उस विशेष कॉल के लिए बाध्य होगा जिसे हमने देखा है।
 तो, अब हम आगे बढ़ते हैं और देखते हैं कि हम C ++ में विभिन्न प्रकार के फंक्शन(function) कैसे कर सकते हैं।
 इसलिए, फंक्शन(function) ओवरलोडिंग(overloading) में, हम एक ही नाम वाले कई फंक्शन(function) को परिभाषित करते हैं क्योंकि जब तक आपके पास एक से अधिक फंक्शन(function) समान नाम नहीं होंगे, तब तक ओवरलोडिंग(overloading) का मुद्दा नहीं उठता है और दूसरा बाध्यकारी होता है संकलन(compile) प्रकार पर।
 बंधन एक औपचारिक शब्द है जो यह कहता है कि फंक्शन(function) कॉल को देखते हुए, आप यह कैसे तय करते हैं कि कौन सा विशेष फंक्शन(function) वास्तव में कहा जाएगा और उस प्रक्रिया को बाध्यकारी के रूप में जाना जाता है।
 यह कंपाइलर(compiler) करता है।
 तो, इसे संकलन(compile) समय पर बाध्यकारी कहा जाता है।
 अब, हम इस पर गौर करते हैं।
 दो स्तंभों पर, हम यहां दो अलग-अलग प्रकार के उदाहरण दिखाएंगे।
 हम एक फंक्शन(function) ‘Add’ के ओवरलोडिंग(overloading) को दिखाते हैं, जहां पहली बार यहाँ, आप विशेष रूप से पैरामीटर्स(parameters) पर ध्यान केंद्रित करते हैं।
‘ऐड’ दो पूर्णांक पैरामीटर लेता है और दूसरे मामले में एक पूर्णांक लौटाता है, यह दो डबल(double) पैरामीटर लेता है और एक डबल(double) लौटाता है।
 इसलिए, हम एक `एड 'फंक्शन(function) लिखने की कोशिश कर रहे हैं, जिसमें वैचारिक रूप से दो नंबरों को जोड़ना चाहिए, लेकिन सी में यह कोई फर्क नहीं पड़ता है या सी ++ में भी, यह मायने रखता है कि इसमें जो नंबर्स जोड़े जा रहे हैं, वे इंट्री हैं या वे डबल(double) हैं या वे हैं कुछ और।
 अब, मैं इन दोनों कार्यों को एक ही कोड में लिख सकता हूं और फिर, मैं इसे दो अलग-अलग स्थानों पर उपयोग कर रहा हूं।
 यहाँ मैं इसे Add (x,y) का उपयोग कर रहा हूँ, जहाँ x एक int है और y एक int है।
 इसलिए, मूल रूप से, मैं दो अंतर पैरामीटर्स(parameters) के साथ ‘एड’ कह रहा हूं।
 इसलिए, यह कॉल ऐड की इस परिभाषा के लिए बाध्य होगी, जो दो इंट पैरामीटर्स(parameters) के लिए काम करती है, जबकि, यदि आप ऐड फंक्शन(function) के दूसरे कॉल को देखते हैं, जो ‘s’ ‘t’ को इस्तेमाल करते है और टाइप डबल(double) के है; का उपयोग करता है, तो हमारे पैरामीटर प्रकार हैं डबल(double) और डबल(double) कंपाइलर(compiler) यह पता लगाएगा कि यह कॉल वास्तव में ऐड फंक्शन(function) की दूसरी परिभाषा के लिए है और इसे वहां बांध देगा।
 तदनुसार, पहला एक राशि 11 को प्रिंट करेगा और दूसरा कॉल 7.75 का योग करेगा।
 जैसा कि हम सभी जानते हैं कि यह इस बात के अतिरिक्त है कि आप किस प्रकार के डेटा का उपयोग कर रहे हैं क्योंकि यदि मैं दो पूर्णांक जोड़ रहा हूं, तो मेरे पास एक प्रकार का जोड़ है।
 अगर मैं दो डबल्स जोड़ रहा हूं, तो मेरे पास एक अलग तरह का जोड़ है।
 इसलिए, इस भाग में हमने देखा है कि फंक्शन(function) ‘ऐड’ में दोनों ही मामले हैं, समान संख्या में पैरामीटर हैं, लेकिन पैरामीटर के प्रकार अलग-अलग हैं और इसके आधार पर हम यह हल करने में सक्षम हैं कि किसी विशेष कॉल में क्या बात हो रही है के बारे में, कॉल से, विभिन्न विकल्पों के विशेष कार्य जो अतिभारित किए गए हैं उन्हें वास्तव में लागू करने की आवश्यकता है, वास्तव में बाध्य होने की आवश्यकता है।
 अब, यह ओवरलोडिंग(overloading) के लिए आवश्यक नहीं है।
 अब तक, हमने सभी उदाहरणों को या तो पांच गुणा कार्यों या ऐड फ़ंक्शंस में देखा है, सभी मामलों में पैरामीटर्स(parameters) की संख्या समान है, लेकिन फंक्शन(function) ओवरलोडिंग(overloading) के लिए यह अनिवार्य नहीं है।
 इसलिए, राइट कॉलम देखें।
 उदाहरण, यहाँ हम दो कार्य क्षेत्र दिखाते हैं।
 पहला एक आयत के क्षेत्र की गणना करने के लिए है।
 तो, यह चौड़ाई और ऊंचाई के दो पैरामीटर्स(parameters) को लेना है, उन्हें गुणा करें और लिखा है कि, जबकि, दूसरा केवल एक पैरामीटर लेता है क्योंकि यह एक वर्ग(square) के क्षेत्र की गणना करने वाला है, इसलिए, आप बस इसे लेते हैं और उस संख्या को वर्ग(square) करते हैं।
 और इसे लिखा है।
 तो, इन दो कार्यों के बीच, नाम समान है।
 इसके दो पैरामीटर हैं जबकि, इसका एक पैरामीटर है और हम नीचे देखेंगे कि हम अभी भी इस दिए गए काम को कर सकते हैं यदि ‘Area(x,y)’ कहते हैं, तो हम जानते हैं कि एक फंक्शन(function) हैं।
 इन फ़ंक्शनों में से एक, इस एक के दो पैरामीटर हैं, पैरामीटर x जैसा कि यहां int है, पैरामीटर y भी int है।
 तो, यह एक (int,int) कॉल है।
 इसलिए, दो पैरामीटर्स(parameters), दोनों को अंतर करना चाहिए।
 वे वास्तव में यहाँ इंट हैं।
 तो, यह कॉल वास्तव में पहले क्षेत्र फंक्शन(function) का आह्वान करेगा।
 इसके विपरीत यदि हम दूसरी कॉल में देखते हैं, तो एक पैरामीटर है 'z' जो टाइप इंट का है।
 यह दूसरे क्षेत्र फंक्शन(function) के लिए बाध्य होगा जिसमें एक पैरामीटर है।
 इसलिए, अधिभार के रूप में उचित रूप से अलग-अलग कार्य, विभिन्न पैरामीटर्स(parameters) की संख्या होने पर भी कॉल किए जाएंगे।
 ध्यान दें कि हालांकि पैरामीटर्स(parameters) की संख्या अलग है, पहले पैरामीटर के संदर्भ में यहां प्रकार समान है।
 पहले के मामलों में, पैरामीटर्स(parameters) की संख्या जहां पहले के मामलों में समान थी।
 बस अलग-अलग प्रकार जहां आपको सुराग देना है जिसके संदर्भ में कॉल करने का सही कार्य है, यहां संख्या ओवरलैपिंग होते हुए भी अलग-अलग हैं।
 आप अभी भी हल करने में सक्षम हैं, फिर भी सही कॉल के लिए सही फंक्शन(function) को बांधने में सक्षम थे।
 इसलिए, जब आप फंक्शन(function) ओवरलोडिंग(overloading) के बारे में बात करते हैं, तो हम मूल रूप से उन स्थितियों के बारे में बात कर रहे हैं, जहां एक से अधिक फंक्शन(function) हैं, जिनका उपयोग करने की आवश्यकता है और ये फंक्शन(function) कुछ हद तक उनकी कार्यक्षमता से संबंधित हैं।
 अब, निश्चित रूप से आप दस संख्याओं को क्रमबद्ध करने के लिए फंक्शन(function) के साथ वर्गमूल करने के लिए एक फंक्शन(function) को अधिभार नहीं डालेंगे।
 मेरा मतलब है कि आप हमेशा उन्हें कॉल कर सकते हैं; मान लें कि मैं 'myfunc' नाम का उपयोग करता हूं और मैं 'myfunc' को अधिभारित करता हूं, यदि पैरामीटर डबल(double) है, तो यह वर्गाकार रूट पाएगा और यदि 'myfunc' का पैरामीटर एक अरै है तो वह सॉर्ट करेगा।
 यह फंक्शन(function) ओवरलोडिंग(overloading) नियमों के अनुसार है, आप ऐसा करने में सक्षम होंगे, लेकिन निश्चित रूप से यह इस सुविधा का एक आपदा उपयोग होगा।
 इसलिए, जब हम मूल अवधारणा को अधिभारित करते हैं, तो यह है कि सभी अतिभारित कार्यों में बहुत संबंधित कार्यक्षमता होनी चाहिए।
 उन्हें बहुत ही समान एल्गोरिदम के बारे में बात करनी चाहिए, लेकिन वे पैरामीटर्स(parameters) के प्रकार जो वे उपयोग करते हैं, गणना करने के लिए उनके द्वारा उपयोग किए जाने वाले पैरामीटर्स(parameters) की संख्या अलग-अलग होनी चाहिए, ताकि मैं इन सभी कार्यों को एक ही नाम दे सकूं और वह है कार्यप्रणाली जिसके द्वारा C ++ में फंक्शन(function) ओवरलोडिंग(overloading) काम करता है फंक्शन(function) ओवरलोडिंग(overloading) के संदर्भ में कुछ प्रतिबंध हैं।
 फंक्शन(function) ओवरलोडिंग(overloading) मुख्य रूप से फंक्शन(function) के हस्ताक्षर के आधार पर तय किया जाता है जैसा कि हमने चर्चा की है कि हर बार के मामले में, हम कह रहे हैं कि, सी में, आप दो कार्यों के बीच कैसे समाधान करते हैं।
 उनके अलग-अलग नाम, अलग-अलग कार्य होने चाहिए।
 C ++ में, दो फंक्शन(function) या दो से अधिक फंक्शन(function) का एक ही नाम हो सकता है।
 आप कैसे हल करते हैं? आप उनके हस्ताक्षर के आधार पर हल करते हैं, पैरामीटर्स(parameters) की संख्या के आधार पर, कई प्रकार के पैरामीटर्स(parameters) के आधार पर हमने इतने सारे उदाहरण देखे हैं।
 अब, सवाल यह है कि अगर मेरे दो कार्य हैं; आइए इस विशेष मामले को यहां देखें, मेरे दो कार्य हैं।
 फिर से क्षेत्र में, दोनों समान पैरामीटर्स(parameters) का उपयोग करते हैं, दोनों एक ही प्रकार के पैरामीटर्स(parameters) (int,int) और (int,int) का उपयोग करते हैं, लेकिन उनके वापसी प्रकार अलग हैं।
 अब, कृपया ध्यान दें कि इस तरह के कार्यों का एक साथ उपयोग नहीं किया जा सकता है।
 फंक्शन(function) ओवरलोडिंग(overloading) के संदर्भ में यह संभव नहीं है।
 तो, शायद यह यहाँ दिखाया गया है, यह एक संकलक से एक विशिष्ट त्रुटि संदेश है जो आपको दिखा रहा है कि यहाँ यह कह रहा है, यह पहला फंक्शन(function) लेता है जो ठीक है, जब आप दूसरे फंक्शन(function) को संकलित करने का प्रयास करते हैं, जब वह देखने की कोशिश करता है, यह कहता है , यही कारण है कि यह दूसरे फंक्शन(function) के बारे में बात कर रहा है जो यह डबल(double) रिटर्न प्रकार कहता है कि ओवरलोड फंक्शन(function) केवल रिटर्न प्रकार से भिन्न होता है।
 यह केवल रिटर्न प्रकार से भिन्न होता है और यह वह नहीं है जिसकी अनुमति है और इसीलिए इसे पुनर्परिभाषित माना जाता है जैसे कि आप उसी फंक्शन(function) को फिर से परिभाषित कर रहे हैं जैसे कि आपने यह दिया होगा यदि आप इस उदाहरण को सी के साथ संकलित करते।
 एक समान त्रुटि संदेश भी मिलेगा क्योंकि यह एक पुनर्परिभाषित संदेश है।
 पहला संदेश वह है जो फंक्शन(function) ओवरलोडिंग(overloading) के दृष्टिकोण से विशिष्ट है कि आप दो कार्यों को तब तक अधिभारित नहीं कर सकते जब तक कि उनके पैरामीटर्स(parameters) की संख्या अलग-अलग नहीं होती या पैरामीटर्स(parameters) की संख्या अधिक हो, लेकिन फिर भी पैरामीटर्स(parameters) के प्रकार कम से कम एक पैरामीटर के लिए भिन्न होते हैं यदि उनके हस्ताक्षर रिटर्न प्रकार में बस अलग हैं, फिर उस ओवरलोडिंग(overloading) की अनुमति नहीं है।
 इसलिए, जब आप ओवरलोड कार्यों को लिखते हैं, तो कृपया इस प्रतिबंध को ध्यान में रखें।
 फंक्शन(function) ओवरलोडिंग(overloading) के लिए हमारे पास नियमों के संदर्भ में योग करने के लिए कहेंगे कि एक ही फंक्शन(function) नाम का उपयोग कई परिभाषाओं में किया जा सकता है।
 यह एक बुनियादी अधिभार अवधारणा है।
 समान नाम वाले फंक्शन(function) में विभिन्न प्रकार के औपचारिक पैरामीटर और / या विभिन्न प्रकार के औपचारिक पैरामीटर होने चाहिए, हमने दोनों के उदाहरण देखे हैं।
 फंक्शन(function) चयन वास्तविक पैरामीटर्स(parameters) की संख्या और प्रकारों पर आधारित होता है।
 हमने यहां उदाहरण भी देखे हैं।
 फिर, यह फंक्शन(function) चयन जैसा कि कंपाइलर(compiler) द्वारा किया जाता है, ओवरलोड रिज़ॉल्यूशन के रूप में जाना जाता है।
 इसका क्या मतलब है कि, आपके पास कई कार्य ओवरलोड हैं।
 एक ही नाम से कई कार्य और आपको एक कॉल साइट दी जाती है; आपको एक कॉल दिया जाता है जहाँ आप यह पता लगाने की कोशिश कर रहे हैं कि इनमें से कौन से कई उम्मीदवारों का उपयोग किया जाना चाहिए।
 उस प्रक्रिया को ओवरलोडिंग(overloading) के लिए रिज़ॉल्यूशन की प्रक्रिया कहा जाता है, कुछ ऐसा जो C ++ कंपाइलर(compiler) करता है और, ओवरटाइम करने पर, आप समझ जाएंगे कि यह वास्तव में बेहद जटिल प्रक्रिया और बेहद शक्तिशाली प्रक्रिया है और उस प्रक्रिया से, कंपाइलर(compiler) यह तय करने की कोशिश करता है कि दिए गए कौन से विशेष कार्य ओवरलोडेड संस्करण जो आप उपयोग करने जा रहे हैं या आप कॉल साइट में उपयोग करने का इरादा रखते हैं, यदि कंपाइलर(compiler) ऐसा करने का मन करता है।
 यदि दो कार्यों में एक ही हस्ताक्षर है, लेकिन अलग-अलग रिटर्न प्रकार या किसी अन्य कारण से पैरामीटर प्रकार अलग-अलग हैं, लेकिन संकलक को हल करने के लिए पर्याप्त नहीं है।
 यदि कंपाइलर(compiler) ऐसा करने में विफल रहता है, तो कंपाइलर(compiler) आपको बताएगा कि आप पुनः घोषणा करने का प्रयास कर रहे हैं या आप बताएंगे कि मैं भ्रमित हूं और कहूंगा कि इसमें अस्पष्टता है और ऐसे मामलों में, आपको कुछ करना होगा फंक्शन(function) को ओवरलोडिंग(overloading) कार्य करने के लिए या फंक्शन(function) ओवरलोडिंग(overloading) से बचने और कोड को एक अलग रूप में लिखने के लिए।
 ओवरलोडिंग(overloading) एक प्रकार से है जो आपको स्थैतिक बहुरूपता(polymorphism) देता है।
 हम तुरंत स्थैतिक बहुरूपता(polymorphism) की गहराई में नहीं जा रहे हैं।
 हम विभिन्न सी ++ सुविधाओं के संदर्भ में बाद में बहुरूपता(polymorphism) के बारे में बात करेंगे।
 यहाँ मुख्य विशेषताएं मैं सिर्फ दो शब्दों की व्याख्या करना चाहूंगा।
 बहुरूपता(polymorphism) का अर्थ है, पाली का अर्थ है- कई और morph का अर्थ- बदलना।
 इसलिए, बहुरूपता(polymorphism) एक में कई परिवर्तन या कई रूपों को समायोजित कर रहा है।
 तो, यहाँ बहुरूपता(polymorphism) का अर्थ है कि नाम से एक ही कार्य, लेकिन यह पैरामीटर प्रकार, विभिन्न व्यवहार, विभिन्न एल्गोरिदम और विभिन्न इंटरफेस पर निर्भर करता है।
 तो, आप मूल रूप से इस एकाधिक रूप को तय करने की कोशिश कर रहे हैं और फिर आप कहते हैं कि यह स्थिर है।
 यहाँ स्थैतिक का क्या मतलब है कि आप संकलन(compile) समय में यह सब करना चाहते हैं जो कि संकलक को इन कई रूपों के बीच तय करने में सक्षम होना चाहिए और आपको यह बताना चाहिए कि इन विभिन्न रूपों में से कौन से पॉलीमॉर्फिक रूप आप अपने फंक्शन(function) कॉल में उपयोग करने का प्रयास कर रहे हैं।
 तो, इस तरह के निर्णय या अधिभार तंत्र को एक साथ मिलाकर स्थैतिक बहुरूपता(polymorphism) के रूप में जाना जाता है।
 बेशक, बहुरूपता(polymorphism) के अन्य रूप हैं, जिन्हें आमतौर पर गतिशील या रन प्रकार के बहुरूपता(polymorphism) कहा जाता है, जिस पर चर्चा करने के बाद हम C ++ भाषा के ऑब्जेक्ट बेस पार्ट पर चर्चा करते हैं।