Introduction
Multiple Inheritance का उपयोग करते समय एक common समस्या उत्पन्न होती है जिसे Diamond Problem कहा जाता है। यह तब होता है जब दो classes एक ही base class से inherit करती हैं और फिर एक derived class उन दोनों classes को inherit करती है।
इस स्थिति में base class की multiple copies बन जाती हैं, जिससे ambiguity (confusion) पैदा होती है। इस समस्या को हल करने के लिए C++ में Virtual Base Classes का उपयोग किया जाता है।
Definition
Virtual Base Class वह base class होती है जिसे virtual keyword के साथ inherit किया जाता है, ताकि उसकी केवल एक ही shared copy derived class में मौजूद रहे।
Diamond Problem को समझना
Structure:
A
/ \
B C
\ /
D
यहाँ:
- B और C दोनों A से inherit करते हैं
- D, B और C दोनों को inherit करता है
- अब D के पास A की दो copies हो जाती हैं
Syntax
class B : virtual public A {
};
class C : virtual public A {
};
class D : public B, public C {
};
Example (Virtual Base Class)
#include <iostream>
using namespace std;
class A {
public:
int x;
};
class B : virtual public A {
};
class C : virtual public A {
};
class D : public B, public C {
public:
void setValue(int val) {
x = val;
}
void show() {
cout << "Value: " << x;
}
};
int main() {
D obj;
obj.setValue(100);
obj.show();
return 0;
}
Output:
Value: 100
Working को समझना
Aको virtual base class बनाया गयाBऔरCदोनों नेAको virtual रूप में inherit कियाDमेंAकी केवल एक copy बनी- ambiguity खत्म हो गई
Without Virtual (Problem)
यदि virtual न लगाया जाए, तो:
Aकी दो copies बनेंगीxको access करते समय ambiguity होगी
Virtual Base Class के लाभ
- Diamond problem को solve करता है
- Ambiguity को हटाता है
- Memory usage को optimize करता है
- Data की single shared copy देता है
Important Points
virtualkeyword inheritance में लगाया जाता है- Base class की केवल एक copy रहती है
- Multiple inheritance में उपयोग होता है
- Ambiguity को रोकता है
निष्कर्ष
Virtual Base Classes C++ में multiple inheritance से उत्पन्न ambiguity को दूर करने का एक प्रभावी तरीका हैं। यह सुनिश्चित करते हैं कि base class की केवल एक ही shared copy मौजूद हो, जिससे program अधिक स्पष्ट और efficient बनता है।