Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में फ़ंक्शन ओवरलोडिंग और const कीवर्ड


C++ में, हम फ़ंक्शन्स को ओवरलोड कर सकते हैं। कुछ फ़ंक्शन्स सामान्य फ़ंक्शन्स होते हैं; कुछ कॉन्स्टेंट टाइप फ़ंक्शन्स होते हैं। आइए एक प्रोग्राम और उसके आउटपुट को देखें ताकि कॉन्स्टेंट फ़ंक्शन्स और सामान्य फ़ंक्शन्स के बारे में विचार मिल सके।

उदाहरण: const मेंबर फ़ंक्शन ओवरलोडिंग

#include <iostream>
using namespace std;

class my_class {
public:
    void my_func() const { // const मेंबर फ़ंक्शन
        cout << "कॉन्स्टेंट फ़ंक्शन कॉल हो रहा है" << endl;
    }
    void my_func() { // नॉन-const मेंबर फ़ंक्शन
        cout << "सामान्य फ़ंक्शन कॉल हो रहा है" << endl;
    }
};

int main() {
    my_class obj;
    const my_class obj_c;
    
    obj.my_func();   // नॉन-const ऑब्जेक्ट → नॉन-const संस्करण
    obj_c.my_func(); // const ऑब्जेक्ट → const संस्करण
    
    return 0;
}

आउटपुट

सामान्य फ़ंक्शन कॉल हो रहा है
कॉन्स्टेंट फ़ंक्शन कॉल हो रहा है

यहां हम देख सकते हैं कि जब ऑब्जेक्ट सामान्य होता है तो सामान्य फ़ंक्शन कॉल होता है। जब ऑब्जेक्ट कॉन्स्टेंट होता है, तो कॉन्स्टेंट फ़ंक्शन्स कॉल होते हैं।


पैरामीटर्स के साथ const ओवरलोडिंग

यदि दो ओवरलोडेड मेथड में पैरामीटर्स हैं, और एक पैरामीटर सामान्य है, दूसरा कॉन्स्टेंट, तो यह त्रुटि उत्पन्न करेगा।

उदाहरण: त्रुटि उत्पन्न करने वाला कोड

#include <iostream>
using namespace std;

class my_class {
public:
    void my_func(const int x) {
        cout << "कॉन्स्टेंट x के साथ फ़ंक्शन कॉल हो रहा है" << endl;
    }
    void my_func(int x) {
        cout << "x के साथ फ़ंक्शन कॉल हो रहा है" << endl;
    }
};

int main() {
    my_class obj;
    obj.my_func(10); // त्रुटि: अस्पष्ट ओवरलोड
    return 0;
}

आउटपुट

[Error] 'void my_class::my_func(int)' को ओवरलोड नहीं किया जा सकता
[Error] 'void my_class::const int' के साथ

कारण: मान पैरामीटर्स के लिए, टॉप-लेवल const (पैरामीटर के लिए) फ़ंक्शन सिग्नेचर का हिस्सा नहीं है। void f(int) और void f(const int) एक ही सिग्नेचर हैं।


रेफरेंस/पॉइंटर पैरामीटर्स के साथ const ओवरलोडिंग

लेकिन यदि आर्गुमेंट्स रेफरेंस या पॉइंटर टाइप के हैं, तो यह त्रुटि उत्पन्न नहीं करेगा।

उदाहरण: सही कोड

#include <iostream>
using namespace std;

class my_class {
public:
    void my_func(const int *x) { // पॉइंटर टू कॉन्स्ट
        cout << "कॉन्स्टेंट x के साथ फ़ंक्शन कॉल हो रहा है" << endl;
    }
    void my_func(int *x) { // पॉइंटर टू नॉन-कॉन्स्ट
        cout << "x के साथ फ़ंक्शन कॉल हो रहा है" << endl;
    }
};

int main() {
    my_class obj;
    int x = 10;
    obj.my_func(&x); // नॉन-कॉन्स्ट पॉइंटर → नॉन-कॉन्स्ट संस्करण
    
    const int y = 20;
    obj.my_func(&y); // कॉन्स्ट पॉइंटर → कॉन्स्ट संस्करण
    
    return 0;
}

आउटपुट

x के साथ फ़ंक्शन कॉल हो रहा है
कॉन्स्टेंट x के साथ फ़ंक्शन कॉल हो रहा है

नियम सारांश

पैरामीटर प्रकारconst ओवरलोडिंग अनुमत?उदाहरण
मान (value)नहींf(int) vs f(const int) → त्रुटि
रेफरेंसहांf(int&) vs f(const int&) → OK
पॉइंटरहांf(int*) vs f(const int*) → OK
मेंबर फ़ंक्शन (this)हांf() vs f() const → OK

सर्वोत्तम अभ्यास: जब भी संभव हो const रेफरेंस पैरामीटर्स (const T&) का उपयोग करें ताकि अनावश्यक कॉपी से बचा जा सके और const-करेक्टनेस सुनिश्चित हो।

  1. - C++ में const कीवर्ड क्या है?

    हम किसी वेरिएबल को स्थिर घोषित करने के लिए const क्वालिफायर का उपयोग करते हैं। इसका मतलब है कि एक बार वेरिएबल इनिशियलाइज़ हो जाने के बाद हम उसका मान नहीं बदल सकते। const का उपयोग करने का एक बहुत बड़ा लाभ है। उदाहरण के लिए, यदि आपके पास PI के मान जैसा एक स्थिर मान है, तो आप नहीं चाहेंगे कि प्रोग्राम

  1. - PHP में फ़ंक्शन ओवरलोडिंग और ओवरराइडिंग

    PHP में फ़ंक्शन ओवरलोडिंग फ़ंक्शन ओवरलोडिंग एक ऐसी सुविधा है जो समान नाम वाले कई मेथड्स बनाने की अनुमति देती है जो उनके द्वारा स्वीकार किए गए इनपुट पैरामीटर्स के प्रकार के आधार पर अलग-अलग काम करते हैं। महत्वपूर्ण: PHP पारंपरिक कंपाइल-टाइम फ़ंक्शन ओवरलोडिंग (C++/Java जैसा) **समर्थन नहीं करता**। इसक

  1. - C# में readonly और const कीवर्ड में अंतर

    readonly कीवर्ड readonly कीवर्ड का उपयोग एक वेरिएबल को परिभाषित करने के लिए किया जाता है जिसे घोषणा के बाद एक बार असाइन किया जा सकता है या तो घोषणा के दौरान या कंस्ट्रक्टर में। const कीवर्ड का उपयोग प्रोग्राम में उपयोग की जाने वाली कॉन्स्टेंट को परिभाषित करने के लिए किया जाता है। C# में readonly और