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 की कई कॉपीज़ को हटाने के लिए, हमें 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 में दिए गए b के मान को ओवरराइट कर देगा।


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

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

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

    एक स्टोरेज क्लास C++ प्रोग्राम के भीतर वेरिएबल्स और/या फंक्शन्स के स्कोप (विजिबिलिटी) और लाइफ-टाइम को परिभाषित करता है। ये स्पेसिफायर्स उस प्रकार से पहले आते हैं जिसे वे संशोधित करते हैं। C++ प्रोग्राम में निम्नलिखित स्टोरेज क्लासेस उपयोग की जा सकती हैं: auto register static extern mutable C में,

  1. - C# में बेस क्लास (Base Class) क्या है?

    परिचय बेस क्लास (आधार वर्ग) वह क्लास है जिससे दूसरी क्लास (डेराइव्ड क्लास) इनहेरिट करती है। डेराइव्ड क्लास बेस क्लास के सदस्यों (फ़ील्ड, मेथड, प्रॉपर्टी) को पुनः उपयोग/विस्तार कर सकती है। सिंटैक्स <access-specifier> class BaseClass { ... } class DerivedClass : BaseClass { ... } उदाहरण: Shap