हाँ, 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; // An object of class D B *b = &d;// A pointer of type B* pointing to d b->s();// prints"D::s() called" return 0; }की ओर इशारा करता है
आउटपुट
In Derived, a=0
इस आउटपुट में, हम देखते हैं कि, व्युत्पन्न वर्ग के s() को कहा जाता है और बेस क्लास s() के डिफ़ॉल्ट मान का उपयोग किया जाता है।
डिफ़ॉल्ट तर्क कार्यों के हस्ताक्षर में भाग नहीं लेते हैं। इसलिए बेस क्लास और व्युत्पन्न वर्ग में s () के हस्ताक्षर समान माने जाते हैं, इसलिए बेस क्लास के s () को ओवरराइड किया जाता है। संकलन समय पर डिफ़ॉल्ट मान का उपयोग किया जाता है। जब कंपाइलर जांचता है कि फ़ंक्शन कॉल में कोई तर्क गुम है, तो यह दिए गए डिफ़ॉल्ट मान को प्रतिस्थापित करता है। इसलिए, उपरोक्त कार्यक्रम में, x के मान को संकलन समय पर प्रतिस्थापित किया जाता है, और रन टाइम पर व्युत्पन्न वर्ग के s () को कहा जाता है। ए का मान संकलन समय पर प्रतिस्थापित किया जाता है, और रन टाइम व्युत्पन्न वर्ग के s() को कहा जाता है।