Virtual functions and dynamic polymorphism c++ In Hindi
C++ प्रोग्रामिंग लैंग्वेज में वर्चुअल फ़ंक्शन और डायनामिक पॉलीमॉर्फिज़्म ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के बेस्ट एडवांस फंक्शन एंड फीचर्स में से एक हैं. जो C++ यूजर को ऐसा क्लास बिहेवियर प्रॉपर्टीज को अप्लाई करने में हेल्प करते हैं, जो मौजूदा क्लास में रेफर किए जा रहे क्लास ऑब्जेक्ट के डाटा टाइप के आधार पर डिफरेंट हो सकता है, न कि क्लास में यूज़ ऑब्जेक्ट रेफरेंस या उसके पॉइंटर के डाटा टाइप के आधार पर। वर्चुअल फ़ंक्शन और डायनामिक पॉलीमॉर्फिज़्म C++ प्रोग्रामर को फ्लेक्सिबल और एक्सटेंसिबल प्रोग्राम सोर्स कोड क्रिएट करने के लिए एसेंशियल होते है. स्पेशली उन कुछ पर्टिकुलर कंडीशन में जहाँ C++ प्रोग्रामर क्लास हायरार्की के साथ वर्क करते हैं।

What are virtual functions in C++ programming?
C++ क्लास प्रोग्राम में डिक्लेअर एक वर्चुअल फ़ंक्शन बेस क्लास में एक मेंबर फ़ंक्शन की तरह डिफाइन होता है. जिसे C++ यूजर के द्वारा डिराइव्ड क्लास या सबक्लास में ओवरराइड होने के पॉसिबल चान्सेस होते हैं। जब C++ यूजर किसी क्लास ऑब्जेक्ट में वर्चुअल फ़ंक्शन को कॉल करते हैं. तो C++ प्रोग्रामिंग रनटाइम मोड में डायनामिक रूप से यह फिक्स करेगा कि मौजूदा क्लास में फ़ंक्शन का कौन सा वर्जन को इनवोक करना है. जो रियल क्लास ऑब्जेक्ट डाटा टाइप (रेफरेंस या पॉइंटर टाइप नहीं) पर कम्पलीट डिपेंड होगा।
Important features of virtual functions in C++ programming.
- C++ यूजर बेस पैरेंट क्लास में वर्चुअल कीवर्ड का यूज़ करके वर्चुअल फंक्शन को डिक्लेयर कर सकते है।
- यदि किसी डिराइव्ड क्लास सबक्लास में कोई फ़ंक्शन ओवरराइड होता है, तो इस कंडीशन में डिराइव्ड क्लास के वर्जन को कॉल किया जाता है. चाहे यहाँ C++ यूजर बेस या रुट क्लास के लिए क्लास पॉइंटर या रेफरेंस को यूज़ कर रहे हों।
- इस मैकेनिज्म प्रॉसेस से रियल क्लास ऑब्जेक्ट डाटा टाइप के आधार पर रनटाइम पर प्रॉपर एक्जैक्ट क्लास फ़ंक्शन को कॉल किया जाता है. जिसे डायनामिक डिस्पैच के रूप में जाना जाता है।
Syntax of virtual functions in C++.
class Base {
public:
virtual void virFunction() {
std::cout << “virFunction in the base or parent class” << std::endl;
}
};
class Derived : public Base {
public:
void virFunction() override { // Here the virtual function is overridden
std::cout << “virFunction version in the derived class” << std::endl;
}
};
virtual functions syntax in C++.
- यहाँ C++ यूजर मौजूदा क्लास में वर्चुअल कीवर्ड का यूज़ बेस क्लास में फ़ंक्शन को वर्चुअल डिक्लेअर करने में करते है।
- डेरिव्ड क्लास या सबक्लास में, क्लास फ़ंक्शन को ओवरराइड किया जाता है. यह C++11 और बाद के सभी वर्जन में ऑप्शनल ओवरराइड कीवर्ड की तरह है।
Why use virtual functions in C++?
C++ क्लास प्रोग्राम में वर्चुअल फ़ंक्शन का यूज़ क्लास में डायनामिक पॉलीमॉर्फिज़्म कांसेप्ट को यूज़ या सपोर्ट करने में किया जाता है. जहाँ क्लास में डिफाइन वर्चुअल फ़ंक्शन का बिहेवियर क्लास ऑब्जेक्ट के रियल डाटा टाइप के आधार पर अलग हो सकता है, न कि सिर्फ़ क्लास ऑब्जेक्ट पॉइंटर या उसके रेफरेंस के टाइप के आधार पर।
How virtual functions work in C++.
जब किसी यूजर डिफाइन क्लास फ़ंक्शन को बेस क्लास पॉइंटर या रेफरेंस के माध्यम से कॉल किया जाता है. तो C++ प्रोग्रामिंग रनटाइम पर यह फिक्स करता है कि कौन सा क्लास फ़ंक्शन रियल क्लास ऑब्जेक्ट डाटा टाइप (यानी, मौजूदा क्लास प्रोग्राम में जिस ऑब्जेक्ट की ओर पॉइंट किया जा रहा है, उसका डाटा टाइप मेथड) के आधार पर कॉल करना है, न कि उसके पॉइंटर के डाटा टाइप के आधार पर।
यह फ़ीचर C++ प्रोग्रामिंग में एक vtable (वर्चुअल टेबल) का यूज़ करके इम्प्लीमेंट किया जाता है. जो रियल टाइम में एक क्लास में सभी वर्चुअल फ़ंक्शन के लिए फ़ंक्शन पॉइंटर्स की एक टेबल होती है।
Example of a virtual function in C++ programming.
#include <iostream>
using namespace std;
class Course {
public:
virtual void select() { // course class select virtual function created
cout << “Select your desire Course ” << endl;
}
virtual ~Course() { // here we create virtual destructor for proper cleanup
cout << “Course class destructor created” << endl;
}
};
class Cplus : public Course {
public:
void select() override { // here we overriding the base class function method
cout << “Cplus derived class created” << endl;
}
~Cplus() { // here we created destructor of Cplus class
cout << “Cplus class destructor created” << endl;
}
};
class Python : public Course {
public:
void select() override { // here we overriding the base class function
cout << “Python subclass created ” << endl;
}
~Python() { // here we created destructor of Python class
cout << “Python destructor created” << endl;
}
};
int main() {
Course* coursefirst = new Cplus(); // here we define base class pointer pointing to derived class object
Course* coursesecond = new Python();
coursefirst->select(); // here it Calls Cplus select() function
coursesecond->select(); // here it Calls Python select() function
delete coursefirst; // here it Deletes Cplus class object
delete coursesecond; // here it Deletes Python class object
return 0;
}
Explanation of a virtual function in C++ programming.
- यहाँ इस एक्साम्प्ल में select() फंक्शन Course क्लास में एक वर्चुअल फ़ंक्शन डिक्लेअर है, और यहाँ Cplus और Python दोनों क्लास मेथड से इसे ओवरराइड करते हैं।
- main() क्लास फ़ंक्शन में C++ यूजर एक Cplus और एक Python क्लास ऑब्जेक्ट क्रिएट करते हैं. लेकिन C++ यूजर उन्हें Course क्लास * टाइप के पॉइंटर का यूज़ करके रेफर करते हैं।
- जब हम कोर्स बेस क्लास में select() फंक्शन को कॉल करते हैं, तो रियल क्लास ऑब्जेक्ट टाइप (पॉइंटर टाइप नहीं) के आधार पर प्रॉपर क्लास वर्जन को इनवोक किया जाता है।
- यह C++ प्रोग्रामिंग में डायनामिक पॉलीमॉर्फिज़्म का कोर फीचर्स है. जो बेस क्लास पॉइंटर्स का यूज़ करते समय भी डिराइव्ड क्लास सबक्लास के ऑब्जेक्ट्स पर ओवरराइड किए गए मेथड को कॉल करने की एबिलिटी को प्रोवाइड करता है।

