Virtual Base Classes

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

  • virtual keyword inheritance में लगाया जाता है
  • Base class की केवल एक copy रहती है
  • Multiple inheritance में उपयोग होता है
  • Ambiguity को रोकता है

निष्कर्ष

Virtual Base Classes C++ में multiple inheritance से उत्पन्न ambiguity को दूर करने का एक प्रभावी तरीका हैं। यह सुनिश्चित करते हैं कि base class की केवल एक ही shared copy मौजूद हो, जिससे program अधिक स्पष्ट और efficient बनता है।

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top