इस खंड में हम C++ में आभासी कक्षाओं के बारे में रोचक तथ्यों के बारे में चर्चा करेंगे। हम पहले दो मामले देखेंगे, फिर हम तथ्य का विश्लेषण करेंगे।
-
सबसे पहले प्रोग्राम को बिना किसी वर्चुअल फंक्शन का उपयोग किए निष्पादित करें।
-
गैर-आभासी फ़ंक्शन के तहत किसी भी वर्चुअल फ़ंक्शन का उपयोग करके प्रोग्राम को निष्पादित करें।
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <iostream> using namespace std; class BaseClass { public: void display(){ cout << "Print function from the base class" << endl; } void call_disp(){ cout << "Calling display() from derived" << endl; this -> display(); } }; class DerivedClass: public BaseClass { public: void display() { cout << "Print function from the derived class" << endl; } void call_disp() { cout << "Calling display() from derived" << endl ; this -> display(); } }; int main() { BaseClass *bp = new DerivedClass; bp->call_disp(); }
आउटपुट
बेस क्लास सेCalling display() from base class Print function from the base class
आउटपुट से, हम समझ सकते हैं कि पॉलीमॉर्फिक व्यवहार तब भी काम करता है जब एक वर्चुअल फ़ंक्शन को गैर-वर्चुअल फ़ंक्शन के अंदर कहा जाता है। vptr और vtable को लागू करते हुए रनटाइम पर कौन सा फ़ंक्शन कॉल किया जाएगा यह तय किया जाता है।
-
vtable - यह फंक्शन पॉइंटर्स की एक टेबल है, जिसे प्रति क्लास मेंटेन किया जाता है।
-
vptr - यह vtable के लिए एक सूचक है, प्रति ऑब्जेक्ट इंस्टेंस बनाए रखा जाता है।