2012-10-02 21 views
5

फ़ंक्शन ओवरलोडिंग दो सदस्य फ़ंक्शंस के बीच हो सकती है जिसमें पैरामीटर की संख्या समान होती है, यदि उनमें से एक को कॉन्स्ट के रूप में घोषित किया जाता है।कॉन्स पैरामीटर

लेकिन यदि एक समारोह में एक कॉन्स्ट तर्क है, तो दूसरे के पास एक ही प्रकार का गैर-कॉन्स्ट तर्क है? क्या यह संदर्भ और पॉइंटर्स के लिए काम करेगा? यदि सी ++ इसे प्रदान करता है, तो यह क्यों प्रदान करता है? यदि आप जानते हैं तो कृपया मेरे साथ कारण साझा करें।

नीचे उदाहरण है जो उपर्युक्त परिदृश्य को समझने में आपकी सहायता करता है।

void fun(const int i) 
{ 
    cout << "fun(const int) called "; 
} 
void fun(int i) 
{ 
    cout << "fun(int) called " ; 
} 
int main() 
{ 
    const int i = 10; 
    fun(i); 
    return 0; 
} 

आउटपुट: कंपाइलर त्रुटि: redefinition of 'void fun(int)'

void fun(char *a) 
{ 
    cout<<"non-const fun() called"; 
} 

void fun(const char *a) 
{ 
    cout<<"const fun() called"; 
} 

int main() 
{ 
    const char *ptr = "GeeksforGeeks"; 
    fun(ptr); 
    return 0; 
} 

आउटपुट: स्थिरांक मज़ा()

बुलाया क्यों दूसरा एक सी में अनुमति दी है ++?

+2

'शून्य मज़ेदार (char * const a) ' – PiotrNycz

+0

के साथ प्रयास करें क्या अभी भी मेरे उत्तर से कुछ गुम है? यदि हां, तो कृपया मुझे बताएं, इसलिए मैं इसे बेहतर बना सकता हूं। :) यदि नहीं, तो क्या मैं इसे स्वीकार करने का सुझाव दे सकता हूं? – Xeo

उत्तर

9

पहले एक के मापदंडों उच्च-स्तरीयconst हैं। इसका अर्थ यह है कि फ़ंक्शन पैरामीटर के मान को नहीं बदल सकता है, हालांकि, कॉलर परवाह नहीं है: कैली को तर्क की प्रतिलिपि मिलती है, इसलिए यदि पैरामीटर में शीर्ष-स्तरconst है, तो यह कार्यान्वयन विवरण है। ध्यान दें कि निम्न काम करता है:

void f(int); // forward declare 

void g(){ f(42); } 

void f(int const i){ /*...*/ } // define above declared function 

भार के के दूसरे सेट के लिए, const नहीं शीर्ष स्तर के अब और है। यह वर्णन करता है कि कैली बदल सकता है या नहीं, सूचक पर इंगित करता है। एक कॉलर के रूप में, आप इसके बारे में परवाह करते हैं। यह सिर्फ एक कार्यान्वयन विस्तार नहीं है।

+2

यह ध्यान देने योग्य है कि जोड़ी तीसरे फ़ंक्शन के लिए 'शून्य मजेदार है (char * const a) ' – PiotrNycz