C ++ में प्रोग्रामिंग के मॉड्यूल(module) 8 में आपका स्वागत है। हमने पहले से ही डिफ़ॉल्ट(default) मापदंडों पर चर्चा की है और हमने फ़ंक्शन(function) ओवरलोडिंग(overloading), फ़ंक्शन(function) ओवरलोडिंग(overloading) की बुनियादी आवश्यकता और कार्यों को कैसे ओवरलोड किया जा सकता है, इस पर चर्चा की है, अर्थात, C ++ में एक ही नाम के साथ कई कार्य हो सकते हैं। लेकिन, जब तक वे अपने पैरामीटर(parameter) प्रकार, संख्या और मापदंडों के प्रकार से भिन्न होते हैं। और, हमने देखा है कि फ़ंक्शंस(functions) रिटर्न प्रकार के साथ अतिभारित नहीं किए जा सकते हैं। अब, हम अधिभार(overload) संकल्प(resolution) की एक झलक देने के लिए आगे बढ़ेंगे। ओवरलोड रिज़ॉल्यूशन एक ऐसी प्रक्रिया है जिसके द्वारा कंपाइलर(compiler) कई उम्मीदवार कार्यों के बीच निर्णय लेता है, एक ओवरलोड फ़ंक्शन(function) के कई उम्मीदवार परिभाषाएं मौजूद हैं। कोंपिलेर(compiler) को यह तय करना है कि उसे किस विशेष से बांधना चाहिए। यह ओवरलोड रिज़ॉल्यूशन है, फ़ंक्शन(function) ओवरलोडिंग(overloading) में थोड़ा उन्नत विषय है। इसलिए, यदि आपको इस स्तर पर संभालना थोड़ा मुश्किल है, तो आप इसे बैन पर रख सकते हैं और बाद में जब हम C ++ में ओवरलोडिंग(overloading) की गहराई के बारे में चर्चा करते हैं, तो बाद में वापस आ सकते हैं। इसलिए, यहां हम आपको एक मूल विचार देने की कोशिश करेंगे कि ओवरलोड कार्यों को कैसे हल किया जाए। मैं यहां एक उदाहरण का उपयोग कर रहा हूं कि चीजों को सरल रखने के लिए सिर्फ एक पैरामीटर(parameter) के साथ। ये मूल चरण हैं जो उम्मीदवार कार्यों के एक सेट की पहचान करते हैं; अर्थात्, आप पहले परिभाषित किए गए सभी कार्यों को स्कैन(scan) करते हैं। निश्चित रूप से, एक फ़ंक्शन(function) को बुलाया जा सकता है, बशर्ते इसे पहले से ही परिभाषित किया गया हो। इसलिए, कंपाइलर(compiler) उन सभी परिभाषाओं को स्कैन(scan) करता है जो अब तक प्राप्त हुई हैं, इस कॉल से पहले और उम्मीदवार कार्यों का एक सेट बनाता है। फिर, यह उम्मीदवार फ़ंक्शन(function) के सेट के माध्यम से स्कैन(scan) करता है जो कि उम्मीदवार फ़ंक्शन(function) के सेट के लिए यह बिंदु स्कैन(scan) है जो व्यवहार्य फ़ंक्शंस(functions) के सेट को खोजने के लिए है जो मापदंडों की संख्या से मेल खाती है और इसी तरह। और फिर, यह सबसे कठिन हिस्सा करने की कोशिश करता है, जो कि, यह निर्णय लेता है कि सबसे अच्छा व्यवहार्य फ़ंक्शन(function) क्या है। और, ऐसा करने के लिए यह निम्नलिखित रणनीतियों का उपयोग करता है। और, कृपया ध्यान दें कि यहां आदेश महत्वपूर्ण है। यही है, यह रणनीतियों पर लागू होता है, न कि मनमाने ढंग से। लेकिन, सटीक मिलान के इस क्रम में, पदोन्नति, मानक प्रकार रूपांतरण और उपयोगकर्ता परिभाषित प्रकार रूपांतरण। अब, निश्चित रूप से हम यहीं सब नहीं समझा सकते हैं। इसलिए, हम बहुत बाद के चरण में भी इस पर वापस आएंगे। अभी के लिए, मैं आपको केवल एक सरल उदाहरण दिखाऊंगा कि कैसे सटीक मैच का उपयोग करके रिज़ॉल्यूशन किया जाता है और इस बारे में थोड़ी बात करें कि सटीक मिलान का एक पैमाना क्या है और प्रमोशन का दायरा क्या है। तो, आइए एक उदाहरण लेते हैं। आइए हम एक पैरामीटर(parameter) के साथ अधिभार(overload) संकल्प(resolution) का एक उदाहरण लेते हैं। मान लो की; यहां शीर्ष पर सूची पर ध्यान केंद्रित करें। आइए हम इस सूची पर ध्यान केंद्रित करें। आइए मान लें कि हमारा लक्ष्य वास्तव में यह पता लगाना है कि किसी विशेष फ़ंक्शन(function) के नाम f और पैरामीटर(parameter) 5.6 के लिए यह तय करना है कि यह फ़ंक्शन(function) किन संकेतों से मेल खाता है। यही है, अगर मैंने कहा है f(5.6), अगर उपयोगकर्ता ने कहा है कि तब किस विशेष फ़ंक्शन(function) में उपयोगकर्ता को कॉल करने का इरादा है। इसलिए, हम इस संदर्भ में ले रहे हैं कि इससे पहले f(5.6) के कॉल का सामना किया गया है 8 अलग-अलग फ़ंक्शन(function) हेडर या फ़ंक्शन(function) परिभाषा को कंपाइलर(compiler) द्वारा देखा गया है। और, बस उन्हें आसानी से संदर्भित करने के लिए हमने उन्हें एफ 1 से एफ 8 के रूप में बुलाया है। अब, आप कैसे तय करते हैं? तो, निश्चित रूप से कॉल ऑफ एफ (5.6) को उनमें से एक के साथ बिल्कुल मेल खाना है, ताकि मैं कह सकूं कि एक विशेष फ़ंक्शन(function) को बुलाया जा रहा है। तो, संकल्प(resolution) में कदम क्या हैं? यदि आप यहां देखते हैं, यदि आप प्रस्तावों में चरणों का उपयोग करते हैं, तो पहले आप उम्मीदवार फ़ंक्शन(function) बनाते हैं। इस मामले में, उम्मीदवार फ़ंक्शन(function) को बनाने का सरल तरीका नाम की तलाश करना और फ़ंक्शन(function) ढूंढना है, जिसका मिलान नाम है। यहां, हमारे पास कोई अन्य कारक नहीं हैं। तो, हम सिर्फ नाम से जाएंगे; नाम यहाँ f है। तो, मुझे देखने दो कि वे कौन से कार्य हैं जिनके नाम f हैं; यह फ़ंक्शन(function), यह फ़ंक्शन(function), यह फ़ंक्शन(function), यह फ़ंक्शन। तो F2, F3, F6, और F8 मेरे उम्मीदवार हैं। निश्चित रूप से, अगर मैं f(5.6) कहता हूं, तो मेरा मतलब यह फ़ंक्शन(function) जी नहीं हो सकता है, भले ही जी में एक पैरामीटर(parameter) है, भले ही जी में एक पैरामीटर(parameter) प्रकार है जो डबल(double) है, जो 5.6 का प्रकार है। लेकिन, निश्चित रूप से मेरा मतलब यह नहीं हो सकता था क्योंकि मेरे नाम अलग हैं। इसलिए, मेरे उम्मीदवार कार्य मुझे ये चार कार्य देते हैं। इसलिए, अब, मैं केवल इस उम्मीदवार फ़ंक्शन(function) पर ध्यान केंद्रित करता हूं। अब इससे, इस उम्मीदवार के आधार पर अगले स्क्रीनिंग कार्य जो मैं करता हूं, मापदंडों की संख्या पर आधारित है। इसलिए, इन उम्मीदवार कार्यों में से, मैं देखता हूं कि मापदंडों की संख्या क्या है। तो, अगर मैं F2 को देखता हूं, तो यह 0 है; अगर मैं F3 को देखता हूं, तो यह 1 है; यदि मैं F6 को देखता हूं, तो यह 2 या 1 है और यदि मैं इसे देखता हूं, तो यह 2 है। इसलिए, संबंधित उम्मीदवार के कार्यों को कॉल करने के लिए ये आवश्यक पैरामीटर(parameter) हैं। और, हमारे यहां कितने पैरामीटर(parameter) हैं? 5.6 - एक पैरामीटर। दूसरा, तुरंत कहते हैं कि यह खारिज किया गया है। मैं F2 को f(5.6) से कॉल नहीं कर सकता। मैं इसी तरह इसे नहीं कह सकता क्योंकि इसके लिए दो मापदंडों की आवश्यकता होती है। तो, मेरी पसंद इन दोनों को उबालती है; यह F3 या F6 है। इसलिए, मैं उन्हें व्यवहार्य कार्यों का सेट कहता हूं। अब F3 और F6 के बीच, मुझे यह तय करना होगा कि किसका उपयोग करना है। इसलिए, मैं सोच सकता हूं कि मैं वास्तव में फ़ंक्शन(function) को F3 कह रहा हूं, जिसे एक इंटिमेट पैरामीटर(parameter) की आवश्यकता है। तो, अगर मुझे फ़ंक्शन(function) F3 को कॉल करना है, तो क्या होना है? ऐसा होता है कि यह पैरामीटर(parameter) वास्तव में एक डबल(double) पैरामीटर(parameter) है; 5.6 एक डबल(double) है। तो, अगर इसे F3 कॉल करना है, तो इस डबल(double) को int में बदलना होगा; जिसका मतलब है, कुछ छंटनी होनी है। और वास्तव में, कॉल F5 हो जाएगा। और फिर, मैं इसे कॉल कर सकूंगा। अन्यथा, मैं F6 को कॉल कर सकता हूं, जहां, यह f(5.6 पहले पैरामीटर(parameter) के रूप में, दूसरा पैरामीटर(parameter) डिफ़ॉल्ट(default) है)। तो, यह कॉल {f(5.6,3.4)} हो सकता है। तो, या तो यह कॉल है या यह कॉल है। अब, सटीक मिलान कहता है कि मैं इसे चुनूंगा क्योंकि यहाँ पैरामीटर(parameter) का प्रकार, औपचारिक पैरामीटर(parameter) और वास्तविक पैरामीटर(parameter) का प्रकार, ये दो मैच हैं। ये दोनों दोहरे हैं। जबकि इस और इसके बीच, मुझे कन्वर्ट करने की आवश्यकता है, एक डबल(double) है। मुझे बदलने की जरूरत है, वास्तव में इसे बनाए रखना है। तो, यह एक पसंदीदा नहीं है। इसलिए, सटीक मिलान रणनीति, टाइप डबल(double) का उपयोग करके मुझे बताती है कि मेरा सुलझा हुआ कार्य F6 है। इसलिए, एक बार जब मैं किया जाता है, तो कोंपिलेर(compiler) यह निर्धारित करेगा कि आपने इस फ़ंक्शन(function) को बुलाया है। यह अधिभार(overload) संकल्प(resolution) की प्रक्रिया है। और, यह एक बहुत जटिल प्रक्रिया है, क्योंकि इसमें बहुत सारे प्रकार शामिल हो सकते हैं। तो, कई अलग-अलग मामले हो सकते हैं। और, इसलिए जब कोई कंपाइलर(compiler) लिखता है तो उसे बहुत अच्छी तरह से जानना होता है। एक प्रोग्रामर के रूप में, कुछ विचार होना अच्छा है क्योंकि आपके पास निश्चित ओवरलोड का मतलब हो सकता है। यदि कंपाइलर(compiler) ने एक अलग तरह के अधिभार(overload) का उपयोग किया है, तो आप एक सही जगह पर गलत फ़ंक्शन(function) का उपयोग कर रहे हैं। इसलिए, हमें इन रणनीतियों में से कुछ पर ध्यान देना चाहिए। सटीक मैच पहले वाला है। यह सिर्फ पुनर्कथन करने के लिए, सबसे अच्छा कार्य, सटीक मिलान पदोन्नति और इतने पर हल करने के लिए अलग-अलग तरीके हैं। तो, आप बस देख रहे हैं कि एक सटीक मैच क्या है। तो, सटीक मिलान है; ये सटीक मिलान के विभिन्न मामले हैं। यही है, आप एक 1value के लिए एक rvalue को परिवर्तित कर सकते हैं; यदि आप किसी चर का उपयोग कर रहे हैं, तो यदि आप इस पद से परिचित नहीं हैं, तो l मान छोड़ दिया गया है या मूल रूप से चर का पता है। और, प्रतिद्वंद्विता एक मूल्य है; एक सही मूल्य है। तो, यह ऐसा है जैसे अगर मैं a = b (a असाइन b) लिख रहा हूं, तो जो मुझे बी में दिलचस्पी है, वह बी का मूल्य है। और, जिस चीज में मेरी दिलचस्पी है, वह वह स्थान है जहां मौजूद है जहां मैं जा सकता हूं और बी के मूल्य को रख सकता हूं। तो, यहाँ मे 1value और rvalue मे रुचि रखता हूँ। तो, आपको 1value से rvalue में बदलने की आवश्यकता हो सकती है। अन्य संभावनाएं इस तरह हैं, जहां आप परिवर्तित करते हैं और आप एक सरणी को पास करने की कोशिश कर रहे हैं, लेकिन वास्तविक फ़ंक्शन(function) को एक सूचक की आवश्यकता है। आप सरणियों को मूल रूप से सूचक में बदल सकते हैं। आप फ़ंक्शन(function) को पॉइंटर में बदल सकते हैं। उदाहरण के लिए, यह फ़ंक्शन(function) पॉइंटर है। हमने देखा है कि फंक्शन(function) पॉइंटर्स(pointers) क्या हैं। यह एक फ़ंक्शन(function) है जिसे मैं हल करने का प्रयास कर रहा हूं। जो, दूसरा पैरामीटर(parameter) एक फ़ंक्शन(function) पॉइंटर है; यह विशेष रूप से कार्य सूचक। लेकिन, जो मैंने पास किया है वह वास्तव में एक फ़ंक्शन(function) है। मैंने पॉइंटर पास नहीं किया। तो, मुझे पास होना चाहिए और जी, जो एक पॉइंटर है। लेकिन, मैंने सीधे तौर पर फंक्शन(function) का नाम दिया है। इसलिए, इस रूपांतरण को एक मैच के रूप में अनुमति दी जाती है। और, मैं पॉइंटर्स(pointers) को निरंतर पॉइंटर्स(pointers) में बदल सकता हूं। तो, ये सटीक मिलान के विभिन्न मामले हैं जो अधिभार(overload) संकल्प(resolution) का उपयोग करता है। इसके अलावा, आप पदोन्नति और रूपांतरण ले सकते हैं। उदाहरण के लिए, मैं वर्ण को पूर्णांक(integer) में परिवर्तित कर सकता हूं, एनम(enum) से पूर्णांक(integer), बूल से पूर्णांक(integer) तक। या, मैं अन्य प्रकार के अभिन्न रूपांतरणों के बीच तैरते हुए डबल(double), डबल(double) फ्लोट(float) में परिवर्तित हो सकता हूं; उस सभी प्रकार के विभिन्न प्रकार, विभिन्न प्रकार के पॉइंटर्स(pointers) को परिवर्तित किया जा सकता है। तो, इन सभी प्रचारों और रूपांतरणों का उपयोग अधिभार(overload) संकल्प(resolution) के लिए भी किया जाता है। यह सिर्फ आपको झलक देने के लिए है। हम बी आएंगेयह बहुत बाद में जब हम C ++ में संभव हो रहे विभिन्न प्रकार के ओवरलोडिंग(overloading) के बारे में बात करते हैं। तो, यह आपको मूल विचार देने के लिए है। अब, मैं समाप्त कर दूंगा। समाप्त होने से पहले, मैं यह भी दिखाऊंगा कि विभिन्न मामलों में एक अधिभार(overload) संकल्प(resolution) विफल हो सकता है। और, आपको उन लोगों के बारे में सावधान रहना होगा। उदाहरण के लिए, यहां इन तीन कार्यों को देखें; फंक्शन(function) 1 में एक फ्लोट(float) है, फंक्शन(function) 2 में दो पैरामीटर(parameter) हैं, फंक्शन(function) 2 में भी एक डिफॉल्ट के साथ दो पैरामीटर(parameter) हैं। और, यह वह उपयोग है जिसे आप करने की कोशिश कर रहे हैं। इसलिए, यदि आप इसे हल करने की कोशिश करते हैं, तो पहले कॉल - 1, जो दो मापदंडों को ले रहा है, फिर आपके उम्मीदवार क्या हैं? सभी तीन कार्य आपके उम्मीदवार हैं; फ़ंक्शन(function) 1, 2, 3, क्योंकि नाम मेल खाता है। अब, व्यवहार्य क्या है? व्यवहार्य मापदंडों की संख्या को देख रहा है। यह फंक्शन(function) 2 और फंक्शन(function) 3 है। अब इन दोनों के बीच फंक्शन(function) 2 और फंक्शन(function) 3 में से कौन सा बेस्ट है? यह कहना मुश्किल है कि पी क्या सबसे अच्छा है क्योंकि पी यहां एक फ्लोट(float) है, जो इन दोनों कार्यों के पहले पैरामीटर(parameter) प्रकार से मेल खाता है। यदि हम दूसरे में देखते हैं, जो s है, int है, जो इन दोनों कार्यों के दूसरे पैरामीटर(parameter) प्रकार से मेल खाता है। इसलिए, आपके लिए फ़ंक्शन(function) 2 और फ़ंक्शन(function) 3 के बीच हल करना संभव नहीं है। इसलिए, यदि हमारे पास ऐसा कोई कॉल है, तो कंपाइलर(compiler) वापस आ जाएगा और आपको बताएगा कि, यह अस्पष्ट है। कोंपिलेर(compiler) कहेंगे, "मैं भ्रमित हूं, मुझे नहीं पता कि क्या करना है"। तो, ये अलग-अलग मामले हैं, जहां रिज़ॉल्यूशन ओवरलोड रिज़ॉल्यूशन विफल हो जाएगा। दूसरा एक और मामला है, जहां हम केवल फ़ंक्शन(function) के लिए एक पैरामीटर(parameter) का उपयोग कर रहे हैं। इसलिए, स्वाभाविक रूप से आपके उम्मीदवार फिर से तीनों हैं। लेकिन, आपका व्यवहार्य एक, निश्चित रूप से दो व्यवहार्य नहीं रहता है क्योंकि यहां आप सिर्फ एक पैरामीटर(parameter) का उपयोग कर रहे हैं। फंक्शन(function) 2 को दो मापदंडों की आवश्यकता होगी। तो, ये दोनों व्यवहार्य हो जाते हैं। लेकिन फिर, अगर ये दोनों व्यवहार्य हैं, तो आप आसानी से उन दोनों के बीच हल नहीं कर सकते क्योंकि आप करेंगे, इसे रूपांतरण द्वारा, int के फ्लोट(float) द्वारा प्रचार कर सकते हैं; हमने अभी देखा। या, यह डिफ़ॉल्ट(default) रूप से मानकर 3 कॉल कर सकता है। और, यह फिर से फ्लोट(float) करने के लिए एक और पदोन्नति है। तो, दोनों में एक ही तरह का है, आप जानते हैं, प्रयास, एक ही तरह की जटिलता। और इसलिए, इसका परिणाम अस्पष्टता होगा। इसलिए, जब भी आप ओवरलोड किए गए कार्यों को लिखते हैं, तो आपको सावधान रहना होगा कि ऐसे मामले आपके कोड में नहीं हैं या यदि कंपाइलर(compiler) ने इसे संकलित करने से इनकार कर दिया है और कहता है कि अस्पष्टता है, तो कृपया इन स्थितियों में से कुछ को देखें जो मौजूद हो सकती हैं। अभी आपका कोड अब, हमने डिफ़ॉल्ट(default) मापदंडों को देखा है और हमने फ़ंक्शन(function) ओवरलोडिंग(overloading) को देखा है। अब, आप केवल यह देख सकते हैं कि जिस कारण से हमने उन्हें एक ही मॉड्यूल(module) में एक साथ रखा है वह यह तथ्य है कि मूल रूप से वे हैं; मुख्य रूप से वे मूल रूप से एक ही विशेषता हैं, डिफ़ॉल्ट(default) पैरामीटर(parameter) के मामले में, उस डिफ़ॉल्ट(default) पैरामीटर(parameter) मान को बनाए रखने के अलावा। भाषा में पूरा तंत्र एक जैसा है। इसलिए, यदि हम इन दो कोडों को बाएँ और दाएँ स्तंभों की ओर से यहाँ देखते हैं और यदि आप मुख्य फ़ंक्शन(function) को देखते हैं, तो यहाँ मुख्य फ़ंक्शन(function) समान है। यह है, यह इन दोनों पर एक ही कोड है। यहां हमारे पास दो फंक्शन(function) के साथ एक फ़ंक्शन(function) डिफॉल्ट है और यहां हमारे पास तीन कार्य ओवरलोड हैं। अब कॉल के संदर्भ में, ये तीनों कॉल एक ही फ़ंक्शन(function) को हल करते हैं। इसके अलावा, यह इस बात पर निर्भर करता है कि आप कितने मापदंडों का उपयोग कर रहे हैं। और यहाँ, ये संबंधित कार्यों के लिए संकल्प(resolution) करते हैं, इसके आधार पर यह सरल संकल्प(resolution) है; क्योंकि इनमें से हर एक मामले में, जैसा कि आप समझ सकते हैं कि केवल तीन ही उम्मीदवार सेट में होंगे। और, हर मामले में व्यवहार्य सेट में केवल एक फ़ंक्शन(function) होगा। तो, देखने के लिए कुछ भी नहीं है। तो, मूल रूप से आप इस बारे में क्या सोच सकते हैं कि यदि आप फ़ंक्शन(function) के एक सेट, फ़ंक्शन(function) के मापदंडों को डिफ़ॉल्ट(default) करते हैं, तो आप हमेशा एक डिफ़ॉल्ट(default) पैरामीटर(parameter) के लिए दो विकल्प बना रहे हैं कि या तो यह कॉल साइट में मौजूद हो सकता है या यह मौजूद नहीं हो सकता है। कॉल साइट में। उस पर निर्भर करते हुए, आप एक ही फ़ंक्शन(function) के लिए दो अलग-अलग हस्ताक्षर उत्पन्न कर रहे हैं। इसलिए, मैं जो कह रहा हूं वह है, अगर मैं यह फ़ंक्शन(function) लिखता हूं; इसका मतलब है, मैं इंट(int) को इंट(int) इंट(int) के साथ कह सकता हूं, जो मूल रूप से यह ओवरलोड है। इसका मतलब यह भी है कि मैं दूसरे पैरामीटर(parameter) को छोड़ सकता हूं। इसलिए, मैं इसे सिर्फ एक इंट(int) के साथ कह सकता हूं, जो यह ओवरलोड है। इसका मतलब यह भी है कि मैं किसी भी पैरामीटर(parameter) को निर्दिष्ट नहीं कर सकता। बस इसे पैरामीटर(parameter) के बिना कॉल करें, जो यह अधिभार(overload) है। इसलिए, डिफ़ॉल्ट(default) पैरामीटर(parameter), फंक्शन(function) ओवरलोडिंग(overloading) के विशेष मामले के अलावा मूल रूप से कुछ भी नहीं है। अतिरिक्त सुविधा के साथ कि यह अधिभार(overload) मूल्य को भी वहन करता है, जो प्रारंभिक है, इसके साथ पैरामीटर(parameter) का मूल्य। अन्यथा, फ़ंक्शन(function) साइट के आधार पर, इस तरह की कॉल साइट, या इस तरह, जो फ़ंक्शन(function) बाध्य होगा, फिर से एक अधिभार(overload) संकल्प(resolution) समस्या है। इसलिए, अब स्वाभाविक रूप से आप फ़ंक्शन(function) ओवरलोडिंग(overloading) के साथ डिफ़ॉल्ट(default) मापदंडों का उपयोग कर सकते हैं। पहले के कुछ उदाहरण, मैं पहले ही इस्तेमाल कर चुका हूं। लेकिन, यहां मैं केवल स्पष्ट रूप से इस पर चर्चा करना चाहता हूं कि मैं स्वयं ओवरलोड कार्यों के बीच कुछ मापदंडों को डिफ़ॉल्ट(default) कर सकता हूं। लेकिन, जब तक आप कॉल साइट से डिफ़ॉल्ट(default) मापदंडों के साथ कार्यों के पूरे सेट को हल कर सकते हैं, तब तक ये सभी उपयोग ठीक हैं। तो, यहाँ एक उदाहरण फिर से यहाँ है। तो, क्षेत्र फ़ंक्शन(function), हमारे पास यह फ़ंक्शन(function) था, हमने पहले देखा था। इसलिए, यहां दोनों के दो पैरामीटर(parameter) हैं। वे विभिन्न प्रकार के होते हैं। और, इस मामले में एक पैरामीटर(parameter) डिफ़ॉल्ट(default) है। इसलिए, अगर हम यह कॉल करते हैं, तो, केवल इस फ़ंक्शन(function) को एक पैरामीटर(parameter) के साथ बुलाया जा सकता है। इससे यहां समाधान हो जाएगा। अगर हम इसे कहते हैं, तो z टाइप डबल(double) का है और y टाइप int का है। तो, आप पहले फ़ंक्शन(function) को कॉल नहीं कर पाएंगे। हम दूसरे फ़ंक्शन(function) को कॉल करेंगे क्योंकि पहला पैरामीटर(parameter) डबल(double) के रूप में मेल खाता है। और, इंट(int) को डबल(double) से कन्वर्ट करने के लिए इंट(int) को डबल(double) में बदलना आसान है क्योंकि अगर आप डबल(double) को इंट(int) में कन्वर्ट करते हैं, तो आप जानकारी खो देते हैं। यदि आप इंट(int) को डबल(double) में परिवर्तित करते हैं, तो आप जानकारी नहीं खोते हैं। तो, यह प्रचार की रणनीति है जो आपको बताएगी कि बाइंडिंग होगी, क्योंकि यह यहाँ बाँध देगी और यह यहाँ बाँध देगी। यही हमने इस बिंदु पर दिखाया है। इसलिए, निचली रेखा वह है जो हम वर्णन करने की कोशिश कर रहे हैं, डिफ़ॉल्ट(default) पैरामीटर(parameter) है और फ़ंक्शन(function) ओवरलोडिंग(overloading) को एक साथ मिलाया जा सकता है जब तक कि पूरी चीज़ को हल नहीं किया जा सकता है। और, निश्चित रूप से यह विफल हो सकता है। उदाहरण के लिए, यह है, फिर से किसी तरह से हमने इसे पहले देखा था। लेकिन फिर, बस विशेष रूप से ध्यान दें कि यहां तीन कार्य हैं जो अतिभारित हैं; यह एक शून्य पैरामीटर(parameter) है, यह एक पैरामीटर(parameter) है और यह दो पैरामीटर(parameter) हैं। तो, यह देखते हुए कि ये तीन कॉल निश्चित रूप से resolvable हैं। यह, व्यवहार्य फ़ंक्शन(function) सेट के प्रत्येक मामले में प्रत्येक के पास केवल एक फ़ंक्शन(function) होगा; करने में सक्षम हो जाएगा। लेकिन, जब आप इस ओवरलोड फ़ंक्शन(function) में से एक के लिए एक डिफ़ॉल्ट(default) पैरामीटर(parameter) डालते हैं, तो आपको एक समस्या होती है क्योंकि अब इस फ़ंक्शन(function) में एक पैरामीटर(parameter) या शून्य पैरामीटर(parameter) हो सकता है। इसलिए, जब मैं शून्य पैरामीटर(parameter) के साथ एक फ़ंक्शन(function) कॉल लिखता हूं, तो आपके व्यवहार्य सेट में इन दोनों को जगह मिलेगी। और, निश्चित रूप से चूंकि कोई पैरामीटर(parameter) नहीं है। ऐसा कोई मेल नहीं है जिसे आप आज़मा सकते हैं क्योंकि अगर कोई पैरामीटर(parameter) नहीं है, तो आप किस प्रकार के वास्तविक पैरामीटर(parameter) के प्रकार और औपचारिक पैरामीटर(parameter) के प्रकार के बीच मिलान करने जा रहे हैं। और इसलिए, कोंपिलेर(compiler) हल नहीं कर सकता है। और, यह फिर से एक ठेठ कोंपिलेर(compiler) से है। यह उस प्रकार का त्रुटि संदेश है जो आपको मिलेगा। और, बस यह देखें कि कोंपिलेर(compiler) क्या कह रहा है; अतिभारित फ़ंक्शन(function) के लिए अस्पष्ट कॉल है। और, यह कहता है कि यह इन दो कार्यों के बीच हल नहीं कर सकता है। इसलिए, जब आप ओवरलोड के साथ डिफ़ॉल्ट(default) मापदंडों का उपयोग करेंगे, तो आपको यह याद रखना होगा कि आप केवल ओवरलोडिंग(overloading) को नहीं देख सकते हैं, न ही आप डिफ़ॉल्ट(default) पैरामीटर(parameter) को देख सकते हैं। आपको डिफ़ॉल्ट(default) मापदंडों को देखना होगा, जो अलग-अलग ओवरलोड बन रहे हैं, और क्या वे अलग-अलग ओवरलोड हैं, क्या वे वास्तव में हमारे द्वारा समझाई गई तंत्र की रूपरेखा द्वारा हल किए जा सकते हैं। तो यह है; ये विशेषताएं हैं। इसलिए, अंत में मैं केवल यह बताना चाहूंगा कि इस मॉड्यूल(module) में हमने C ++ भाषा के एक प्रमुख पहलू को संबोधित करने की कोशिश की है जो एक फ़ंक्शन(function) ओवरलोडिंग(overloading) है। सबसे पहले, हमने डिफ़ॉल्ट(default) मापदंडों की धारणा को ध्यान में रखा है, जिसे बाद में हमने समझाया है, यह फ़ंक्शन(function) ओवरलोडिंग(overloading) का एक विशेष मामला है। डिफ़ॉल्ट(default) पैरामीटर(parameter) अपने डिफ़ॉल्ट(default) मान प्रदान करने और फ़ंक्शन(function) पुस्तकालयों का उपयोग करना आसान बनाने के लिए बड़ी संख्या में मापदंडों के साथ फ़ंक्शन(function) लिखना बहुत आसान बनाते हैं। और, फ़ंक्शन(function) ओवरलोडिंग(overloading) एक अन्य विशेषता है जो हमें एक ही फ़ंक्शन(function) नाम के साथ कई फ़ंक्शन(function) लिखने की अनुमति देती है, जब तक कि उनके पैरामीटर(parameter) प्रकार भिन्न होते हैं। इसलिए, हमने इस संबंध में विभिन्न बारीकियों पर गौर किया। और, हमने बुनियादी स्थैतिक बहुरूपता की बात की है। और सबसे महत्वपूर्ण बात, हमने उस तंत्र पर भी चर्चा की है जिसके द्वारा, मेरा मतलब है; हमने तंत्र के लिए रूपरेखा पर चर्चा की है जिसके द्वारा अधिभार(overload) के लिए विभिन्न कार्यों को हल किया जा सकता है। इसके साथ हम इस मॉड्यूल(module) को समाप्त कर देंगे। और, अगले एक में हम उसी अवधारणा को आगे बढ़ाएंगे। और, देखें कि इसी तरह के ओवरलोडिंग(overloading) कॉन्सेप्ट को ऑपरेटरों के मामले में भी C ++ में लागू किया जा सकता है, जिसे ऑपरेटर ओवरलोडिंग(overloading) के रूप में जाना जाएगा।