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