यहां हम विभिन्न प्रकार के बहुरूपता देखेंगे। प्रकार हैं -
- तदर्थ
- समावेश
- पैरामीट्रिक
- जबरदस्ती
एड-हॉक पॉलीमॉर्फिज्म को ओवरलोडिंग कहा जाता है। यह एक ही नाम के फ़ंक्शन को विभिन्न प्रकारों के लिए अलग-अलग तरीके से कार्य करने की अनुमति देता है। फ़ंक्शन और ऑपरेटर दोनों को ओवरलोड किया जा सकता है। कुछ भाषाएं ऑपरेटर ओवरलोडिंग का समर्थन नहीं करती हैं, लेकिन फ़ंक्शन ओवरलोडिंग आम है।
उदाहरण
#include<iostream> using namespace std; int add(int a, int b) { return a + b; } string add(string a, string b) { return a + b; //concatenate } int main() { cout << "Addition of numbers: " << add(2, 7) << endl; cout << "Addition of Strings: " << add("hello", "World") << endl; }
आउटपुट
Addition of numbers: 9 Addition of Strings: helloWorld
समावेशन बहुरूपता को सबटाइपिंग कहा जाता है। यह बेस क्लास पॉइंटर्स और संदर्भों का उपयोग करके व्युत्पन्न कक्षाओं को इंगित करने की अनुमति देता है। यह रनटाइम बहुरूपता है। हम वास्तविक वस्तु के प्रकार को तब तक नहीं जानते जब तक वह निष्पादित नहीं हो जाती। इस समावेशन बहुरूपता को प्राप्त करने के लिए हमें C++ में वर्चुअल फ़ंक्शन की आवश्यकता है।
उदाहरण
#include<iostream> using namespace std; class Base { public: virtual void print() { cout << "This is base class." << endl; } }; class Derived : public Base { public: void print() { cout << "This is derived class." << endl; } }; int main() { Base *ob1; Base base_obj; Derived derived_obj; ob1 = &base_obj; //object of base class ob1->print(); ob1 = &derived_obj; //same pointer to point derived object ob1->print(); }
आउटपुट
This is base class. This is derived class.
जबरदस्ती बहुरूपता को कास्टिंग कहा जाता है। इस प्रकार का बहुरूपता तब होता है जब किसी वस्तु या आदिम को किसी अन्य प्रकार में डाला जाता है। कास्टिंग दो प्रकार की होती है। निहित कास्टिंग स्वयं कंपाइलर का उपयोग करके किया जाता है, और स्पष्ट कास्ट कॉन्स्ट_कास्ट, डायनामिक_कास्ट आदि का उपयोग करके किया जाता है।
उदाहरण
#include<iostream> using namespace std; class Integer { int val; public: Integer(int x) : val(x) { } operator int() const { return val; } }; void display(int x) { cout << "Value is: " << x << endl; } int main() { Integer x = 50; display(100); display(x); }
आउटपुट
Value is: 100 Value is: 50
पैरामीट्रिक बहुरूपता को प्रारंभिक बंधन कहा जाता है। इस प्रकार का बहुरूपता विभिन्न प्रकारों के लिए एक ही कोड का उपयोग करने की अनुमति देता है। हम इसे टेम्प्लेट का उपयोग करके प्राप्त कर सकते हैं।
उदाहरण
#include<iostream> using namespace std; template <class T> T maximum(T a, T b) { if(a > b) { return a; } else { return b; } } int main() { cout << "Max of (156, 78): " << maximum(156, 78) << endl; cout << "Max of (A, X): " << maximum('A', 'X') << endl; }
आउटपुट
Max of (156, 78): 156 Max of (A, X): X