C++ Polymorphism

“हेलो दोस्तों! इस पोस्ट में हम लोग Polymorphism के बारे में पढ़ेंगे। साथ ही हम इसके फायदों, उपयोग और उदाहरणों को भी समझेंगे ताकि यह अवधारणा हमें अच्छे से समझ आ सके। Polymorphism ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग का एक महत्वपूर्ण हिस्सा है, जिससे हम code को अधिक लचीला और पुन: प्रयोग योग्य बना सकते हैं। तो चलिए जानते हैं!”

Polymorphism का परिचय

Polymorphism शब्द का अर्थ है “अनेक रूप”, यानी एक ही चीज़ का अलग-अलग रूपों में उपयोग। C++ में, Polymorphism का मतलब है कि एक ही नाम का फंक्शन या ऑपरेटर विभिन्न स्थितियों में अलग-अलग तरह से व्यवहार कर सकता है।

Polymorphism दो प्रकार का होता है:

  1. Compile-time Polymorphism (फंक्शन ओवरलोडिंग और ऑपरेटर ओवरलोडिंग)
  2. Runtime Polymorphism (वर्चुअल फंक्शन्स और प्योर वर्चुअल फंक्शन्स)
Polymorphism-in-Cpp

Compile-time Polymorphism

Compile-time Polymorphism में, function या operators का एक से अधिक रूप पहले से निर्धारित होता है। इसका उपयोग प्रोग्राम के compile होने के दौरान ही होता है।

1. Function Overloading

Function Overloading में एक ही नाम के फंक्शन को कई बार डिफाइन किया जा सकता है, लेकिन उनके पैरामीटर्स की संख्या या प्रकार अलग होते हैं। इससे कंपाइलर को पता चलता है कि किस स्थिति में कौन-सा फंक्शन कॉल किया जाना है।

उदाहरण:-

#include <iostream>
using namespace std;

class Print {
public:
    void display(int i) {
        cout << "Integer: " << i << endl;
    }

    void display(double d) {
        cout << "Double: " << d << endl;
    }

    void display(string str) {
        cout << "String: " << str << endl;
    }
};

int main() {
    Print p;
    p.display(10);            // इंटीजर वर्जन
    p.display(5.5);           // डबल वर्जन
    p.display("Hello");       // स्ट्रिंग वर्जन
    return 0;
}

Output:-

इंटीजर: 10
डबल: 5.5
स्ट्रिंग: Hello

यहाँ display फंक्शन के तीन अलग-अलग रूप हैं, जिन्हें अलग-अलग parameters के साथ overloaded किया गया है।


2. Operator Overloading (ऑपरेटर ओवरलोडिंग)

Operator Overloading का उपयोग करके हम C++ के मौजूदा ऑपरेटर्स को विभिन्न प्रकार के डेटा के साथ उपयोग कर सकते हैं।

उदाहरण:

#include <iostream>
using namespace std;

class Complex {
private:
    int real, imag;

public:

    // '+' ऑपरेटर ओवरलोडिंग
    Complex operator + (Complex const &obj) {
        Complex res;
        res.real = real + obj.real;
        res.imag = imag + obj.imag;
        return res;
    }

    void display() {
        cout << real << " + " << imag << "i" << endl;
    }
};

int main() {
    Complex c1(3, 4), c2(1, 2);
    Complex c3 = c1 + c2; // '+' ऑपरेटर का उपयोग
    c3.display();
    return 0;
}

Output:-

4 + 6i

यहाँ, + ऑपरेटर को Complex class के लिए overload किया गया है, ताकि इसे दो Complex objects के बीच उपयोग किया जा सके।


Runtime Polymorphism

Runtime Polymorphism में, function का चयन program के Run-Time के दौरान किया जाता है। इसके लिए Virtual Function का उपयोग होता है।

1. Virtual Functions

Virtual Function Base Class में Define किए जाते हैं और derived class में overload किए जाते हैं। जब हम pointer के माध्यम से किसी derived class के objects को call करते हैं, तो Virtual Function के कारण Run-Time पर सही फंक्शन का चयन होता है।

उदाहरण:

#include <iostream>
using namespace std;

class Animal {
public:
    virtual void sound() {
        cout << "यह जानवर की आवाज है।" << endl;
    }
};

class Dog : public Animal {
public:
    void sound() override {
        cout << "कुत्ता भौंकता है।" << endl;
    }
};

int main() {
    Animal *a;
    Dog d;
    a = &d;
    a->sound(); // वर्चुअल फंक्शन के कारण Dog का sound() कॉल होगा
    return 0;
}

Output:- कुत्ता भौंकता है।

यहाँ, sound function virtual है, इसलिए Dog class का sound फंक्शन रन-टाइम पर चुना गया है।


2. Pure Virtual Functions

Pure Virtual Functions एक वर्चुअल फंक्शन का विशेष प्रकार है जिसमें Base Class में कोई भी Default कार्यान्वयन नहीं होता। इसे 0 के बराबर सेट किया जाता है और इसका उपयोग Abstract Classes बनाने के लिए किया जाता है।

उदाहरण:

#include <iostream>
using namespace std;

class Shape {
public:
    virtual void draw() = 0; // Pure virtual function
};

class Circle : public Shape {
public:
    void draw() override {
        cout << "यह एक सर्कल है।" << endl;
    }
};

int main() {
    Shape *shape;
    Circle c;
    shape = &c;
    shape->draw(); // सर्कल का draw() फंक्शन कॉल होगा
    return 0;
}

Output:- यह एक सर्कल है।

यहाँ, Shape क्लास में draw एक Pure Virtual Function है, जिसे Circle क्लास में ओवरराइड किया गया है।


संक्षेप में

  • Compile-time Polymorphism: प्रोग्राम के कम्पाइल होने पर फंक्शन्स या ऑपरेटर्स के विभिन्न रूपों का चयन होता है। इसके अंतर्गत Function Overloading और Operator Overloading आते हैं।
  • Runtime Polymorphism: प्रोग्राम के Run Time पर Function का चयन होता है। इसमें Virtual Functions और Pure Virtual Functions शामिल हैं।

People Also Ask

Polymorphism संबंधित प्रश्न और उत्तर (C++ में हिंदी में)

प्रश्न 1: Polymorphism क्या है?

उत्तर: Polymorphism का अर्थ है “अनेक रूप”। C++ में, Polymorphism का मतलब है कि एक ही नाम का function या operators विभिन्न स्थितियों में अलग-अलग तरह से व्यवहार कर सकता है।

प्रश्न 2: Polymorphism कितने प्रकार का होता है?

उत्तर: Polymorphism दो प्रकार का होता है:

  1. Compile-time Polymorphism (फंक्शन ओवरलोडिंग और ऑपरेटर ओवरलोडिंग)
  2. Runtime Polymorphism (वर्चुअल फंक्शन्स और प्योर वर्चुअल फंक्शन्स)

प्रश्न 3: Compile-time Polymorphism क्या है?

उत्तर: Compile-time Polymorphism में, function या operators का एक से अधिक रूप पहले से निर्धारित होता है। इसका उपयोग प्रोग्राम के compiler होने के दौरान ही होता है। इसके अंतर्गत Function Overloading और Operator Overloading आते हैं।

प्रश्न 4: Function Overloading क्या है?

उत्तर: Function Overloading में एक ही नाम के function को कई बार Define किया जा सकता है, लेकिन उनके Parameters की संख्या या प्रकार अलग होते हैं। इससे compiler को पता चलता है कि किस स्थिति में कौन-सा function call किया जाना है।

प्रश्न 5: Operator Overloading क्या है?

उत्तर: Operator Overloading का उपयोग करके हम C++ के मौजूदा operators को विभिन्न प्रकार के डेटा के साथ उपयोग कर सकते हैं। इससे operators को नया व्यवहार दिया जा सकता है।

प्रश्न 6: Runtime Polymorphism क्या है?

उत्तर: Runtime Polymorphism में, function का चयन प्रोग्राम के Run Time के दौरान किया जाता है। इसके लिए Virtual Function का उपयोग होता है।

प्रश्न 7: Virtual Functions क्या होते हैं?

उत्तर: Virtual Functions बेस क्लास में डिफाइन किए जाते हैं और Derived Class में Override किए जाते हैं। जब हम पॉइंटर के माध्यम से किसी Derived Class के ऑब्जेक्ट को कॉल करते हैं, तो Virtual Function के कारण Run Time पर सही फंक्शन का चयन होता है।

प्रश्न 8: Pure Virtual Functions क्या होते हैं?

उत्तर: Pure Virtual Functions एक वर्चुअल फंक्शन का विशेष प्रकार है जिसमें Base Class में कोई भी डिफ़ॉल्ट कार्यान्वयन नहीं होता। इसे 0 के बराबर सेट किया जाता है और Pure Virtual Function का उपयोग Abstract Classes बनाने के लिए किया जाता है।

प्रश्न 9: Polymorphism का उपयोग किसलिए किया जाता है?

उत्तर: Polymorphism का उपयोग प्रोग्राम में लचीलापन और पुन: प्रयोज्यता बढ़ाने के लिए किया जाता है। इससे कोड को अधिक संगठित और सुव्यवस्थित बनाना संभव होता है।

प्रश्न 10: वर्चुअल फंक्शन और प्योर वर्चुअल फंक्शन में क्या अंतर है?

उत्तर: वर्चुअल फंक्शन का बेस क्लास में एक डिफ़ॉल्ट कार्यान्वयन होता है जिसे डेराइव्ड क्लास में ओवरराइड किया जा सकता है। जबकि प्योर वर्चुअल फंक्शन का बेस क्लास में कोई भी डिफ़ॉल्ट कार्यान्वयन नहीं होता और इसे 0 के बराबर सेट किया जाता है।

Leave a comment