কম্পিউটার টিউটোরিয়াল

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; // স্টেটমেন্ট ১, এরর হবে
    obj.b = 30; // স্টেটমেন্ট ২, এরর হবে
    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 থেকে।

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

D3 থেকে B-এর একাধিক কপি সরাতে, D1 এবং D2-এ 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; // স্টেটমেন্ট ৩
    obj.b = 30; // স্টেটমেন্ট ৪
    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-এর শুধু একটি কপি আছে এবং স্টেটমেন্ট ৪, স্টেটমেন্ট ৩-এ দিয়ে b-এর ভ্যালু ওভাররাইট করবে।


  1. C++-এ ডট অপারেটর (.) কী?

  2. C++-এ অ্যাক্সেস মডিফায়ার

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

  4. C#-এ বেস ক্লাস (Base Class) কী