सी ++ में वर्चुअल फ़ंक्शन बेस क्लास पॉइंटर्स की सूची बनाने के लिए उपयोग करते हैं और किसी भी व्युत्पन्न वर्ग के कॉल विधियों को व्युत्पन्न क्लास ऑब्जेक्ट को जानने के बिना भी उपयोग करते हैं। वर्चुअल फ़ंक्शंस को रनटाइम पर देर से हल किया जाता है।
वर्चुअल फ़ंक्शन का मुख्य उपयोग रनटाइम बहुरूपता प्राप्त करना है। कोड की दक्षता बढ़ाने के लिए इनलाइन फ़ंक्शंस का उपयोग किया जाता है। इनलाइन फ़ंक्शन का कोड संकलन समय पर इनलाइन फ़ंक्शन कॉल के बिंदु पर प्रतिस्थापित हो जाता है, जब भी इनलाइन फ़ंक्शन को कॉल किया जाता है।
जब भी किसी वर्चुअल फ़ंक्शन को बेस क्लास रेफरेंस या पॉइंटर का उपयोग करके कॉल किया जाता है, तो उसे इनलाइन नहीं किया जा सकता है, लेकिन जब भी उस क्लास के संदर्भ या पॉइंटर के बिना ऑब्जेक्ट का उपयोग करके कॉल किया जाता है, तो इनलाइन किया जा सकता है क्योंकि कंपाइलर कंपाइल समय पर ऑब्जेक्ट की सटीक क्लास को जानता है।पी>
उदाहरण कोड
#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; // An object of class D B *bptr = &d;// A pointer of type B* pointing to d b.s();//Can be inlined as s() is called through object of class bptr->s();// prints"D::s() called" //cannot be inlined, as virtualfunction is called through pointer. return 0; }
आउटपुट
In Base In Derived