ভার্চুয়ালগুলির ডিফল্ট থাকতে পারে। বেস শ্রেণিতে খেলাপি ক্লাসগুলি ডিফল্টগুলি উত্তরাধিকার সূত্রে প্রাপ্ত হয় না।
কোন ডিফল্ট ব্যবহৃত হয় - যেমন, বেস শ্রেণি 'বা একটি উত্পন্ন শ্রেণি' - ফাংশনে কল করার জন্য ব্যবহৃত স্ট্যাটিক টাইপ দ্বারা নির্ধারিত হয়। যদি আপনি একটি বেস শ্রেণীর অবজেক্ট, পয়েন্টার বা রেফারেন্সের মাধ্যমে কল করেন তবে বেস শ্রেণিতে চিহ্নিত ডিফল্টটি ব্যবহৃত হয় is বিপরীতভাবে, আপনি যদি কোন উদ্ভূত শ্রেণীর অবজেক্টের মাধ্যমে কল করেন, তবে পয়েন্টার বা রেফারেন্স থেকে উত্পন্ন শ্রেণিতে বর্ণিত ডিফল্টগুলি ব্যবহৃত হয়। এটি প্রমাণ করে স্ট্যান্ডার্ড উদ্ধৃতি নীচে একটি উদাহরণ আছে।
কিছু সংকলক আলাদা কিছু করতে পারে তবে সি ++ 03 এবং সি ++ 11 স্ট্যান্ডার্ড এটাই বলে:
8.3.6.10:
ভার্চুয়াল ফাংশন কল (10.3) পয়েন্টার বা রেফারেন্সের স্থির প্রকারের দ্বারা নির্ধারিত ভার্চুয়াল ফাংশনের ঘোষণায় ডিফল্ট আর্গুমেন্টগুলি ব্যবহার করে বা অবজেক্টটি নির্দেশ করে reference একটি উত্পন্ন শ্রেণিতে একটি ওভাররাইডিং ফাংশন ওভাররাইড করা ফাংশন থেকে ডিফল্ট আর্গুমেন্টগুলি অর্জন করে না। উদাহরণ:
struct A {
virtual void f(int a = 7);
};
struct B : public A {
void f(int a);
};
void m()
{
B* pb = new B;
A* pa = pb;
pa->f(); //OK, calls pa->B::f(7)
pb->f(); //error: wrong number of arguments for B::f()
}
ডিফল্ট কী উঠেছে তা প্রদর্শন করার জন্য এখানে একটি নমুনা প্রোগ্রাম is আমি কেবল ব্রিভটির জন্য এস এর structচেয়ে এখানে ব্যবহার করছি class- classএবং structপ্রায় সব ক্ষেত্রেই ডিফল্ট দৃশ্যমানতা বাদে ঠিক একই রকম।
#include <string>
#include <sstream>
#include <iostream>
#include <iomanip>
using std::stringstream;
using std::string;
using std::cout;
using std::endl;
struct Base { virtual string Speak(int n = 42); };
struct Der : public Base { string Speak(int n = 84); };
string Base::Speak(int n)
{
stringstream ss;
ss << "Base " << n;
return ss.str();
}
string Der::Speak(int n)
{
stringstream ss;
ss << "Der " << n;
return ss.str();
}
int main()
{
Base b1;
Der d1;
Base *pb1 = &b1, *pb2 = &d1;
Der *pd1 = &d1;
cout << pb1->Speak() << "\n" // Base 42
<< pb2->Speak() << "\n" // Der 42
<< pd1->Speak() << "\n" // Der 84
<< endl;
}
এই প্রোগ্রামটির আউটপুট (এমএসভিসি 10 এবং জিসিসি 4.4 এ):
Base 42
Der 42
Der 84