BCA / B.Tech 9 min read

Overloading & Overriding in Hindi

Overriding and Overloading in C++ in  Hindi | C++ में ओवरराइडिंग और ओवरलोडिंग हिंदी में  : 


C++ और अन्य ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषाओं में, ओवरराइडिंग और ओवरलोडिंग दो महत्वपूर्ण अवधारणाएँ हैं जो फ़ंक्शनलिटी के विस्तार और संशोधन में सहायक होती हैं। ये दोनों अवधारणाएँ पॉलीमॉर्फिज़्म (Polymorphism) के सिद्धांत पर आधारित हैं। हालांकि दोनों का उद्देश्य अलग-अलग होता है, फिर भी इनका उपयोग कोड को अधिक लचीला और पुन: प्रयोज्य बनाने के लिए किया जाता है। इस लेख में, हम ओवरराइडिंग और ओवरलोडिंग की अवधारणाओं को विस्तार से समझेंगे और उनके उदाहरण देखेंगे।

ओवरराइडिंग (Overriding in Hindi)

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

ओवरराइडिंग के प्रमुख बिंदु:

  • ओवरराइडिंग तब होती है जब किसी डेरिव्ड क्लास में बेस क्लास के फ़ंक्शन को फिर से परिभाषित किया जाता है।
  • फ़ंक्शन का नाम, सिग्नेचर (पैरामीटर लिस्ट), और रिटर्न टाइप एक जैसा होना चाहिए।
  • ओवरराइडिंग केवल इनहेरिटेंस (विरासत) के साथ संभव है।
  • ओवरराइडिंग का उपयोग तब किया जाता है जब हम बेस क्लास के फ़ंक्शन की कार्यक्षमता को डेरिव्ड क्लास में संशोधित करना चाहते हैं।
  • इसका उपयोग रन-टाइम पॉलीमॉर्फिज़्म (Run-time Polymorphism) में किया जाता है।

ओवरराइडिंग का उदाहरण:

#include <iostream>
using namespace std;

// बेस क्लास
class Animal {
public:
    virtual void sound() {
        cout << "Animal makes a sound" << endl;
    }
};

// डेरिव्ड क्लास
class Dog : public Animal {
public:
    void sound() override {  // ओवरराइड किया हुआ फंक्शन
        cout << "Dog barks" << endl;
    }
};

int main() {
    Animal *animalPtr;
    Dog dogObj;

    animalPtr = &dogObj;
    animalPtr->sound();  // डॉग का साउंड फंक्शन ओवरराइड हुआ है

    return 0;
}

इस उदाहरण में:

  • Animal बेस क्लास है और इसका एक वर्चुअल फ़ंक्शन sound() है।
  • Dog क्लास Animal से इनहेरिट करती है और sound() फ़ंक्शन को ओवरराइड करती है।
  • बेस क्लास का पॉइंटर डेरिव्ड क्लास के ऑब्जेक्ट को पॉइंट कर रहा है और रन-टाइम पर Dog का ओवरराइडेड फ़ंक्शन sound() कॉल होता है। इसे रन-टाइम पॉलीमॉर्फिज़्म कहते हैं।

ओवरराइडिंग के लाभ:

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

ओवरराइडिंग की सीमाएँ:

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

ओवरलोडिंग (Overloading in Hindi)

ओवरलोडिंग तब होती है जब एक ही नाम के एक से अधिक फ़ंक्शन होते हैं, लेकिन उनके पैरामीटर की संख्या या प्रकार अलग-अलग होती है। इसे कंपाइल-टाइम पॉलीमॉर्फिज़्म (Compile-time Polymorphism) भी कहा जाता है। ओवरलोडिंग का उपयोग तब किया जाता है जब हमें एक ही कार्य को विभिन्न तरीकों से लागू करना हो, जैसे विभिन्न इनपुट्स के आधार पर।

ओवरलोडिंग के प्रमुख बिंदु:

  • ओवरलोडिंग तब होती है जब एक ही नाम के फ़ंक्शन्स होते हैं लेकिन उनके पैरामीटर्स अलग होते हैं।
  • ओवरलोडिंग में फ़ंक्शन का नाम एक जैसा होता है, लेकिन पैरामीटर लिस्ट (आर्ग्युमेंट्स) या उनका प्रकार भिन्न होता है।
  • इसका उपयोग एक ही फ़ंक्शन को विभिन्न तरीकों से कार्यान्वित करने के लिए किया जाता है।
  • ओवरलोडिंग कंपाइल-टाइम पॉलीमॉर्फिज़्म का एक उदाहरण है।

ओवरलोडिंग का उदाहरण:

#include <iostream>
using namespace std;

class Calculator {
public:
    // जोड़ने के लिए ओवरलोड किया गया फंक्शन (इंट)
    int add(int a, int b) {
        return a + b;
    }

    // जोड़ने के लिए ओवरलोड किया गया फंक्शन (फ्लोट)
    float add(float a, float b) {
        return a + b;
    }

    // तीन इंटेजर को जोड़ने के लिए ओवरलोड किया गया फंक्शन
    int add(int a, int b, int c) {
        return a + b + c;
    }
};

int main() {
    Calculator calc;

    // इंटेजर जोड़ना
    cout << "Sum of 2 and 3 (int): " << calc.add(2, 3) << endl;

    // फ्लोट जोड़ना
    cout << "Sum of 2.5 and 3.7 (float): " << calc.add(2.5f, 3.7f) << endl;

    // तीन इंटेजर जोड़ना
    cout << "Sum of 2, 3 and 4 (int): " << calc.add(2, 3, 4) << endl;

    return 0;
}
इस उदाहरण में:

  • Calculator क्लास में तीन ओवरलोडेड add() फ़ंक्शन हैं:
  • एक दो इंटेजर जोड़ता है।
  • दूसरा दो फ्लोटिंग पॉइंट नंबर जोड़ता है।
  • तीसरा तीन इंटेजर जोड़ता है।
  • इन सभी फ़ंक्शन्स का नाम add है, लेकिन उनके पैरामीटर भिन्न हैं।

ओवरलोडिंग के लाभ:

  • संगठित कोड: एक ही नाम के साथ विभिन्न कार्यों को संभालने के लिए कोड को व्यवस्थित करना आसान हो जाता है।
  • क्लीन कोड: कोड साफ और स्पष्ट होता है, क्योंकि विभिन्न फ़ंक्शन्स के लिए अलग-अलग नाम देने की आवश्यकता नहीं होती।
  • फ़ंक्शनलिटी का विस्तार: हम एक ही कार्य के लिए विभिन्न इनपुट प्रकारों का समर्थन कर सकते हैं, जैसे इंट, फ्लोट आदि।

ओवरलोडिंग की सीमाएँ:

  • ओवरलोडिंग केवल तभी संभव है जब फ़ंक्शन के पैरामीटर अलग-अलग हों, अगर पैरामीटर एक जैसे हैं तो ओवरलोडिंग संभव नहीं होती।
  • अगर बहुत अधिक ओवरलोडिंग की जाती है तो कोड जटिल हो सकता है और उसे समझना मुश्किल हो सकता है।

Difference Between Overriding and Overloading in C++ in Hindi | ओवरराइडिंग और ओवरलोडिंग के बीच अंतर :

Overloading & Overriding  in Hindi