হ্যাঁ, 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(); // প্রিন্ট করবে "D::s() called"
return 0;
}আউটপুট
In Derived, a=0
এই আউটপুটে আমরা দেখতে পাচ্ছি যে, ডেরাইভড ক্লাসের s() কল হয়েছে এবং বেস ক্লাসের s()-এর ডিফল্ট ভ্যালু ব্যবহার হয়েছে।
ডিফল্ট আর্গুমেন্ট ফাংশনের সিগনেচারে অংশ নেয় না। তাই বেস ক্লাস এবং ডেরাইভড ক্লাসে s()-এর সিগনেচার একই বিবেচিত হয়, তাই বেস ক্লাসের s() ওভাররাইড হয়েছে। ডিফল্ট ভ্যালু কম্পাইল টাইমে ব্যবহার হয়। কম্পাইলার চেক করে যে ফাংশন কলে আর্গুমেন্ট অনুপস্থিত, তাই ডিফল্ট ভ্যালু সাবস্টিটিউট করে। তাই উপরের প্রোগ্রামে, x-এর ভ্যালু কম্পাইল টাইমে সাবস্টিটিউট হয়, এবং রান টাইমে ডেরাইভড ক্লাসের s() কল হয়। a-এর ভ্যালু কম্পাইল টাইমে সাবস্টিটিউট হয়, এবং রান টাইমে ডেরাইভড ক্লাসের s() কল হয়।