কম্পিউটার

C++ এ ভার্চুয়াল বেস ক্লাস কি?


ভার্চুয়াল বেস ক্লাস ব্যবহার করা হয় যখন একটি প্রাপ্ত ক্লাসে বেস ক্লাসের একাধিক কপি থাকে।

উদাহরণ কোড

#include <iostream>
using namespace std;
class B {
   public: int b;
};

class D1 : public B {
   public: int d1;
};

class D2 : public B {
   public: int d2;
};

class D3 : public D1, public D2 {
   public: int d3;
};

int main() {
   D3 obj;

   obj.b = 40; //Statement 1, error will occur
   obj.b = 30; //statement 2, error will occur
   obj.d1 = 60;
   obj.d2 = 70;
   obj.d3 = 80;

   cout<< "\n B : "<< obj.b
   cout<< "\n D1 : "<< obj.d1;
   cout<< "\n D2: "<< obj.d2;
   cout<< "\n D3: "<< obj.d3;
}

উপরের উদাহরণে, D1 এবং D2 উভয়ই B-এর উত্তরাধিকারী, তাদের উভয়েরই B-এর একক কপি রয়েছে। যাইহোক, D3-এর কাছে D1 এবং D2 উভয়েরই উত্তরাধিকার রয়েছে, তাই D3-এর কাছে B-এর দুটি কপি রয়েছে, একটি D1 থেকে এবং অন্যটি D2 থেকে।

উপরের উদাহরণে স্টেটমেন্ট 1 এবং 2 ত্রুটি তৈরি করবে, কারণ কম্পাইলার D3-এ b-এর দুটি কপির মধ্যে পার্থক্য করতে পারে না।

D3 থেকে B-এর একাধিক কপি মুছে ফেলার জন্য, আমাদের অবশ্যই D1 এবং D3-এ B-কে ভার্চুয়াল ক্লাস হিসেবে উত্তরাধিকার সূত্রে পেতে হবে।

সুতরাং, ভার্চুয়াল বেস ক্লাস ব্যবহার করে উপরের উদাহরণটি হবে −

উদাহরণ কোড

#include<iostream>
using namespace std;
class B {
   public: int b;
};

class D1 : virtual public B {
   public: int d1;
};

class D2 : virtual public B {
   public: int d2;
};

class D3 : public D1, public D2 {
   public: int d3;
};

int main() {
   D3 obj;

   obj.b = 40; // statement 3
   obj.b = 30; // statement 4

   obj.d1 = 60;
   obj.d2 = 70;
   obj.d3 = 80;

   cout<< "\n B : "<< obj.b;
   cout<< "\n D1 : "<< obj.d1;
   cout<< "\n D2 : "<< obj.d2;
   cout<< "\n D3 : "<< obj.d3;
}

আউটপুট

B : 30
D1 : 60
D2 : 70
D3 : 80

এখন, D3-এ B-এর একটি মাত্র কপি আছে এবং বিবৃতি 4 বি-এর মান ওভাররাইট করবে, বিবৃতি 3-এ দেওয়া আছে।


  1. C++ এ ডট অপারেটর কি?

  2. C++ এ অ্যাক্সেস মডিফায়ারগুলি কী কী?

  3. C++ এ ভেরিয়েবলের স্টোরেজ ক্লাস কি কি?

  4. C# এ একটি বেস ক্লাস কি?