यहां हम बहुरूपता (पॉलीमॉर्फिज्म) के विभिन्न प्रकार देखेंगे। प्रकार हैं:
- एड-हॉक (Ad-Hoc)
- समावेशन (Inclusion)
- पैरामीट्रिक (Parametric)
- कर्सन (Coercion)
एड-हॉक बहुरूपता को ओवरलोडिंग कहा जाता है। यह समान नाम वाले फ़ंक्शन को विभिन्न प्रकारों के लिए अलग-अलग व्यवहार करने की अनुमति देता है। फ़ंक्शन और ऑपरेटर दोनों को ओवरलोड किया जा सकता है। कुछ भाषाएं ऑपरेटर ओवरलोडिंग का समर्थन नहीं करतीं, लेकिन फ़ंक्शन ओवरलोडिंग आम है।
उदाहरण
#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 << "संख्याओं का योग: " << add(2, 7) << endl;
cout << "स्ट्रिंग्स का योग: " << add("hello", "World") << endl;
}
आउटपुट
संख्याओं का योग: 9 स्ट्रिंग्स का योग: helloWorld
समावेशन बहुरूपता को सबटाइपिंग (उपप्रकार) कहा जाता है। यह बेस क्लास पॉइंटर्स और रेफरेंस का उपयोग करके डेराइव्ड क्लासेज को इंगित करने की अनुमति देता है। यह रनटाइम बहुरूपता है। हम तब तक वास्तविक ऑब्जेक्ट के प्रकार को नहीं जानते जब तक यह निष्पादित नहीं हो रहा हो। C++ में इसे प्राप्त करने के लिए हमें वर्चुअल फ़ंक्शन की आवश्यकता होती है।
उदाहरण
#include<iostream>
using namespace std;
class Base {
public:
virtual void print() {
cout << "यह बेस क्लास है।" << endl;
}
};
class Derived : public Base {
public:
void print() {
cout << "यह डेराइव्ड क्लास है।" << endl;
}
};
int main() {
Base *ob1;
Base base_obj;
Derived derived_obj;
ob1 = &base_obj; // बेस क्लास का ऑब्जेक्ट
ob1->print();
ob1 = &derived_obj; // समान पॉइंटर डेराइव्ड ऑब्जेक्ट को इंगित करता है
ob1->print();
}
आउटपुट
यह बेस क्लास है। यह डेराइव्ड क्लास है।
कर्सन बहुरूपता को कास्टिंग (प्रकारांतरण) कहा जाता है। इस प्रकार की बहुरूपता तब होती है जब किसी ऑब्जेक्ट या प्रिमिटिव को किसी अन्य प्रकार में कास्ट किया जाता है। कास्टिंग के दो प्रकार हैं। इम्प्लिसिट कास्टिंग कंपाइलर द्वारा स्वयं की जाती है, और एक्सप्लिसिट कास्ट const_cast, dynamic_cast आदि का उपयोग करके की जाती है।
उदाहरण
#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 << "मान है: " << x << endl;
}
int main() {
Integer x = 50;
display(100);
display(x);
}
आउटपुट
मान है: 100 मान है: 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