Polymorphism क्या है? ये कितने प्रकार के होते हैं 

What is Polymorphism in C++ in Hindi

Polymorphism, Object oriented programming के सबसे उपयोगी गुणों में से एक है।

Polymorphism शब्द Greek के दो शब्दों  "Poly" तथा "Morphism" से मिलकर बना है।

' Poly' का अर्थ  Many तथा Morphism का अर्थ है Forms अत: Polymorphism का अर्थ है "Many form"(कई रूप)।

आइए इसे एक उदाहरण से समझे जैसे एक महिला अपने घर में बेटी या पत्नी के समान व्यवहार करेगी, वहीं अपने Clinic में Patient के साथ Doctor के समान व्यवहार करेगी 
अगर वह Market गई है तो एक Customer के समान व्यवहार करेगी अतः हमने देखा कि महिला एक ही है लेकिन अलग अलग स्थितियों में उसकी भूमिका और व्यवहार विभिन्न प्रकार से है यही Polymorphism का Concept है।

C++ में Polymorphism तब होती है जब एक ही object या function का व्यवहार अलग-अलग संदर्भों में भिन्न होता है।
C++ में Polymorphism आपको विभिन्न Classes की Objects के साथ ऐसे व्यवहार करने की अनुमति देती है जैसे कि वे एक ही Base class की Objects हों। 

यह एक ही function या method को विभिन्न प्रकार की Objects के साथ काम करने की अनुमति देता है।
Polymorphism को मुख्यत: Function overloading, Operator overloading और Virtual functions के माध्यम  से प्राप्त किया जाता है।

यह आपके Code को लचीला तथा फिर से उपयोग करने लायक बनाता है क्योंकि आप एक सामान्य Code लिखते है जो विभिन्न प्रकार के Objects के साथ कार्य करते है और प्रत्येक Object अपने स्वयं के विशिष्ट विवरणों को handle करते हैं।

Types of polymorphism in C++ in Hindi

C++ में Polymorphism दो प्रकार के होते हैं
1) Compile time (Static) polymorphism
2) Run-time(Dynamic )polymorphism

Compile time (Static) polymorphism 

C++ में Compile-time polymorphism का मतलब यह है कि कोई function या operator आपके द्वारा दिए गए Arguments के प्रकार या उसकी संख्या के आधार पर अलग-अलग कार्य कर सकता है।

जब आप Code को Compile करते हैं तब Compiler यह निर्णय लेता है कि कौन सा function या operator  को Use करना है। 

Compiler का, यह निर्णय कि, कौन से function या operator को Use करना है Compiler time में लिया जाता है न कि Runtime में इसलिए इसे Compile time polymorphism कहते हैं।
यह एक ही function या operator को उसे प्राप्त होने वाले Input के आधार पर विभिन्न कार्यों को Handle करने की अनुमति देता है।
Compile time polymorphism को निम्न प्रकार से प्राप्त किया जा सकता है
1) Function overloading
2) Operator overloading

Function overloading

जब कई functions को एक ही नाम से लेकिन अलग अलग Parameters के साथ Define किया जाता है तब उसे Function overloading कहते हैं।

Function को उसके Arguments के प्रकार तथा उसकी संख्या को बदलकर Overloaded किया जाता है 
अर्थात Function overloading में Function का नाम समान होना चाहिए और उनके Parameters या Arguments अलग अलग होना चाहिए

Function overloading के लिए कुछ विशिष्ट नियम होते है जिसे एक Function को Overload करते समय, अवश्य ही अनुसरण करना होता है।

Program for Function overloading
#include<iostream> 
using namespace std;
class Message{
public:
    // Overloaded functions
    void display(int i) {
        cout << "I am an Integer: " << i << endl;
    }
    void display(double d) {
        cout << "I am a double: " << d << endl;
    }
    void display (const string &s) {
        cout << "I am string: " << s << endl;
    }
};
int main() {
    Message m;
    m.display (15); //first function     
    m. display(3.5); //Second overloaded function 
   m.display("Computerehub");//Third overloaded function 
    return 0;
};
Output:
I am an Integer: 15
I am a double: 3.5
I am string: Computerehub

Explanation:
1) Class को Define करना: 
`Message` class के पास तीन Overloaded `display` functions है।
प्रत्येक के लिए विभिन्न Parameters types जैसे`int`, `double`, और `string`, Use किया गया है।

2) Function Overloading: 
  1) display(int i) 
यह एक Integer data को display करता है
 2) display(int double) 
यह एक  double data को display करता है
 3) display (const string &s)` 
यह एक string data को display करता है

3) Main Function:
Message class का एक object 'm' बनाया गया है जिसके द्वारा ऊपर के तीनो Overloaded function को Call किया गया है।

4) Output
और अंत में हमे display function के द्वारा प्रत्येक प्रकार के Data का output मिलता है। 

Operator overloading

C++ में Operator overloading, Operators जैसे +,-,* आदि Custom data types के साथ  के साथ कैसे कार्य करता है इसे Redefine करने की अनुमति देता है।

यह सुविधा Operators (जैसे `+` या `-`) को Objects के साथ सरल और तार्किक तरीके से काम करने की अनुमति देता है जो आपके Code को पढ़ना और उपयोग करना सरल बनाता है।

जब आप किसी Operator को Overload करते हैं, तो आप अपनी Class में एक विशेष Member function या Friend function बनाते हैं जो Program को यह बताता है कि जब उस Operator का Use Class की Objects पर किया जाता है तो क्या करना है। 

किसी Operator को Overload करने का Syntax एक Regular function को परिभाषित करने के समान है, लेकिन इसमें Operator Keyword का उपयोग किया जाता है।
Program for Operator overloading
#include<iostream>
using namespace std;
class Test{
    int x, y;
public:
    void get(int a, int b) {
        x = a;
        y = b;
    }
       void display();
       void operator++();
};
void Test::display() {
    cout << "X = " << x << endl;
    cout << "Y = " << y << endl;
}
void Test::operator++() {
    x = ++x;
    y = ++y;
}
int main() {
      Test t1;
    t1.get(5, 10);
    t1.display();    
        ++t1;
      t1. display();
        ++t1;
      t1. display();
    return 0;
}
Output:
X = 5
Y = 10
X = 6
Y = 11
X = 7
Y = 12

Explaination:
1) `Test` class के पास दो Private integer members, `x` और `y` है।

2) `get` function, `x` और `y` के लिए Value set करता है।

3)`display` function x` और `y` की Values को print करता है।

4)`operator++()` function `x` और`y` में 1 Increment करने के लिए `++` operator को overload करता है।

5) `main()`, Test` class का एक object(t1) बनाया जाता है और उसे get का Use करके 5 और 10 Values के साथ Initialize किया जाता है।

6) `displayData` के Use करके Initial Value को Display किया जाता है।

7) `++t1` statement `x` और `y` में 1 Increment करता है।

8) प्रत्येक Increment के बाद update values को Display किया जाता है।

Run-time (Dynamic) polymorphism 

Run-time polymorphism में, Program execution के दौरान Program यह तय करता है कि Actual object के प्रकार के आधार पर किस function को Call करना है, चूकि 
उचित Function को call करने का निर्णय Runtime के दौरान होता है न कि Compile time पर इसलिए  इसे Runtime polymorphism या Dynamic या Late binding भी कहा जाता है।

इस प्रकार का Polymorphism को 
Virtual functions और function overriding के द्वारा Execute किया जाता है। Runtime polymorphism के सभी Methods Runtime के दौरान ही Invoke होते हैं।

Runtime polymorphism को जटिल समस्याओं से निपटने के लिए बेहतर माना जाता है क्योंकि या Program के Run होने के दौरान ही यह निर्णय लेता है कि कौन सा Methods का Use करना है, न कि Program को लिखते समय।

Run time polymorphism को निम्न प्रकार से प्राप्त किया जा सकता है
1) Function overriding 
2) Virtual function 

Function Overriding

C++ में Function overriding एक Derived class को किसी function का खुद का Version बनाने की अनुमति देता है जो पहले से Base class में रहता है।

इसका मतलब है कि Derived class, Base class के function में बदलाव कर सकता है या उसमें  जोड़ सकता है।

Program for Function overriding
#include<iostream>
using namespace std;
class Fruits{
public:
    virtual void displayColor() {
        cout << "The fruit has different colors " << endl;
    }
};
class Apple : public Fruits{
public:
    void displayColor()   {
    cout << "Apple's color is red." << endl;
    }
};
class Grape: public Fruits{
public:
    void displayColor() {
        cout << "Grape's color is green." << endl;
    }
};
int main() {
    Fruits* f;
    Apple a;
    Grape g;
    f = &a;
    f->displayColor();  // Calls Apple's displayColor function
    f = &g;
    f->displayColor();  // Calls Grape's displayColor function
    return 0;
};
Output:
Apple's color is red.
Grape's color is green.

Virtual function 

C++ में एक Virual function, Base class का function है जिससे आप अपेक्षा करते है कि इसे Derived classes में बदला जा सकता है। अर्थात Base class के इस Virtual function को Derived class में पुन: परिभाषित किया जा सकता है, जिससे विभिन्न Derived classes में Virtual function के अलग अलग Versions हो सकतें है।

Difference between Compile-time and Run-time polymorphism in C++ in Hindi

1) Compile-Time Polymorphism:
 इसमे कौन सा Function को Call करना है यह निर्णय Compile time में लिया जाता है 

Run-Time Polymorphism:
इसमें कौन सा Function को Call करना है यह निर्णय Run-Time में लिया जाता है 
 
2) Compile-Time Polymorphism:
Compile-Time Polymorphism को  Function overloading, Operator overloading तथा Template का Use करके Implement किया जाता है।

Run-Time Polymorphism:
इसे inheritance और virtual functions का Use करके Implement किया जाता है।

3) Compile -Time Polymorphism:
यह कम flexible होता है क्योंकि function call को Compile time पर fix किया जाता है 
 
Run-Time Polymorphism:
यह ज्यादा flexible होता है क्योंकि function call को Run time पर Object के आधार पर निर्धारित किया जाता है।

4) Compile-Time Polymorphism:
यह तेज होता है क्योंकि Program के Run होने से पहले ही function को call करने का निर्णय लिया जाता है
 
Run-Time Polymorphism:
यह धीमा होता है क्योंकि Run time पर एक सही function को Call करने का अतिरिक्त भार रहता है।

5) Compile-Time Polymorphism:
इसे Static polymorphism के नाम से भी जाना जाता है

Run-Time Polymorphism:
इसे Dynamic polymorphismके नाम से भी जाना जाता है

6) Compile-Time Polymorphism:
इसमे कम Memory use किया जाता है क्योंकि सब कुछ पहले से ही resolve रहता है।

Run-Time Polymorphism:
Pointer तथा Virtual table के लिए ज्यादा Memory Use किया जा सकता है 

7) Compile-Time polymorphism:
इसमें Function overriding शामिल नहीं है 

Run-Time polymorphism:
इसमें Function overriding शामिल है
 
8) Compile-Time Polymorphism:
Program के run होने के दौरान अतिरिक्त कार्य नहीं रहता है

Run-Time Polymorphism:
Program को Run होते समय यह पता लगाने के लिए अतिरिक्त काम करना पड़ता है कि किस function को Call करना है।

9) Compile -Time polymorphism:
इसमें Object का निर्माण Compile time में होता है।

Run -Time polymorphism:
इसमें Object का निर्माण Run time में होता है

10) Compile-Time Polymorphism:
Errors को Program के Run होने से पहले पकड़ा जाता है जिससे इसे Debug(fix )करना सरल हो जाता है।

Run-Time Polymorphism:
Errors, Program के Run होने के दौरान ही दिखाई देता है जिससे इसे Debug करना कठिन हो जाता है 


 Related Posts

> C++ क्या है? उसके इतिहास, गुण, उपयोग, फायदे और नुकसान 

> Basic structure of C++ Program 

> C++ में Tokens क्या है? और उसके प्रकार

> C++ Variables क्या है?, उसके प्रकार, उसे कैसे Declare, Define करते हैं

> C++ में Constants क्या है? उसके प्रकारों की संपूर्ण जानकारी

> C++ में Basic Input और Output (cin,cout,cerr) की जानकारी

> Data type in C++ की संपूर्ण जानकारी 

> C+ में Operators और उसके प्रकार जानें Practical सहित 

> C++ में Conditional और उसके प्रकारों को जानें Practical सहित 

> C++ में Looping statements और उसके प्रकार Practical सहित 

> C++ में Jump Statements और उसके प्रकारों की संपूर्ण जानकारी Practical सहित

> C++ में Array क्या है? और उसके प्रकारों की जानकारी Practical सहित

> C++ में Function क्या है उसके प्रकार, उपयोग प्रोग्राम सहित 

> C++ में Structure क्या है Practical सहित

> OOPs Concepts in C++ in Hindi- C++ में OOPs के बारे में

> Oops के फायदे और नुकसान की जानकारी 

> OOP और POP के बीच अंतर 

> C++ में Class और Object की सम्पूर्ण जनकारी

> C++ में Array of Objects क्या है? 

> C++ में Pointers, Pointer to an objects, Pointer to an Array की संपूर्ण जानकारी हिंदी में।

C++ में Passing objects क्या है

> C++ में Reference और Type Casting की संपूर्ण जानकारी

> C++ में Access specifier की संपूर्ण जानकारी 

> C++ में Static Data Members और Member Functions के बारे में Practical सहित 

> C++ में Memory allocation और Memory management operators (new और delete) Practical सहित 

> Friend Function in C++ in Hindi 

> Friend Class in C++ in Hindi Practical सहित 

> Inline function in C++ in Hindi 

> Function Overloading in C++ in Hindi Practical सहित 

> Operator Overloading in C++ in Hindi PRACTICAL सहित 

> C++ में Constructor क्या है और उसके प्रकारों की संपूर्ण जानकारी

> C++ में Destructor क्या है ?उसकी संपूर्ण जानकारी

> C++ मे Inheritance क्या है उसके प्रकारों को जानें प्रोग्राम सहित

> C++ में Virtual function की संपूर्ण जानकारी

> C++ में File handling की संपूर्ण जानकारी 

> C++ में Exception handling  की संपूर्ण जानकारी