Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

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 की कई प्रतियाँ निकालने के लिए, हमें B को D1 और D3 में वर्चुअल क्लास के रूप में इनहेरिट करना होगा।

तो, वर्चुअल बेस क्लास का उपयोग करने वाला उपरोक्त उदाहरण होगा -

उदाहरण कोड

#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 में दिए गए b के मान को अधिलेखित कर देगा।


  1. C++ में एक्सेस मॉडिफायर क्या हैं?

    डेटा छिपाना ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग की महत्वपूर्ण विशेषताओं में से एक है जो किसी प्रोग्राम के कार्यों को एक वर्ग प्रकार के आंतरिक प्रतिनिधित्व को सीधे एक्सेस करने से रोकता है। क्लास के सदस्यों के लिए एक्सेस प्रतिबंध लेबल किए गए एक्सेस संशोधक द्वारा निर्दिष्ट किया गया है:क्लास बॉडी के भीतर सार

  1. C++ में वेरिएबल के स्टोरेज क्लासेस क्या हैं?

    स्टोरेज क्लास एक C++ प्रोग्राम के भीतर वेरिएबल और/या फंक्शन्स के स्कोप (दृश्यता) और लाइफ-टाइम को परिभाषित करता है। ये विनिर्देशक उस प्रकार से पहले होते हैं जिसे वे संशोधित करते हैं। निम्नलिखित भंडारण वर्ग हैं, जिनका उपयोग C++ प्रोग्राम में किया जा सकता है। स्वतः पंजीकरण स्थिर बाहरी परिवर्तनीय सी

  1. सी # में बेस क्लास क्या है?

    एक वर्ग बनाते समय, पूरी तरह से नए डेटा सदस्यों और सदस्य कार्यों को लिखने के बजाय, प्रोग्रामर यह निर्दिष्ट कर सकता है कि नए वर्ग को मौजूदा वर्ग के सदस्यों का उत्तराधिकारी होना चाहिए। इस मौजूदा वर्ग को आधार वर्ग कहा जाता है, और नए वर्ग को व्युत्पन्न वर्ग कहा जाता है। एक वर्ग को एक से अधिक वर्ग या इंट