কম্পিউটার

একটি C++ ভার্চুয়াল ফাংশন ডিফল্ট প্যারামিটার থাকতে পারে?


হ্যাঁ, 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() বলা হয়। কম্পাইলের সময় a-এর মান প্রতিস্থাপিত হয় এবং রান টাইমে প্রাপ্ত ক্লাসের s() বলা হয়।


  1. C++ এ স্থানীয় ক্লাস

  2. আমি কখন একটি ফরওয়ার্ড ঘোষণা C/C++ ব্যবহার করতে পারি?

  3. C# এ এক ক্লাসে আমাদের কতজন ধ্বংসকারী থাকতে পারে?

  4. কিভাবে ডিফল্ট ভার্চুয়াল আচরণ C++ এবং জাভাতে ভিন্ন হয়?