C++ में वर्चुअल फंक्शन्स बेस क्लास पॉइंटर्स की एक सूची बनाने और किसी भी डेराइव्ड क्लास के मेथड्स को कॉल करने के लिए उपयोग किए जाते हैं, बिना यह जाने कि डेराइव्ड क्लास ऑब्जेक्ट किस प्रकार का है। वर्चुअल फंक्शन्स रनटाइम पर लेट रिजॉल्व होते हैं।
वर्चुअल फंक्शन का मुख्य उपयोग रनटाइम पॉलीमॉर्फिज्म प्राप्त करना है। इंलाइन फंक्शन्स का उपयोग कोड की दक्षता बढ़ाने के लिए किया जाता है। इंलाइन फंक्शन का कोड कंपाइल टाइम पर इंलाइन फंक्शन कॉल के पॉइंट पर प्रतिस्थापित हो जाता है, जब भी इंलाइन फंक्शन को कॉल किया जाता है।
जब भी किसी वर्चुअल फंक्शन को बेस क्लास रेफरेंस या पॉइंटर का उपयोग करके कॉल किया जाता है, तो इसे इंलाइन नहीं किया जा सकता, लेकिन जब भी इसे उस क्लास के ऑब्जेक्ट का उपयोग करके बिना रेफरेंस या पॉइंटर के कॉल किया जाता है, तो इसे इंलाइन किया जा सकता है क्योंकि कंपाइलर कंपाइल टाइम पर ऑब्जेक्ट की सटीक क्लास जानता है।
उदाहरण कोड
#include<iostream> using namespace std; class B { public: virtual void s() { cout<<" In Base \n"; } }; class D: public B { public: void s() { cout<<"In Derived \n"; } }; int main(void) { B b; D d; // क्लास D का एक ऑब्जेक्ट B *bptr = &d;// B* टाइप का एक पॉइंटर जो d की ओर इशारा करता है b.s();//इंलाइन किया जा सकता है क्योंकि s() को क्लास के ऑब्जेक्ट के माध्यम से कॉल किया जाता है bptr->s();// prints"D::s() called" //इंलाइन नहीं किया जा सकता, क्योंकि वर्चुअल फंक्शन को पॉइंटर के माध्यम से कॉल किया जाता है। return 0; }आउटपुट
In Base In Derived