Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

What is a Virtual Base Class in C++



Virtual Base Class

Virtual base classes are used in virtual inheritance. It is a way of preventing multiple instances of given classes occurs in the inheritance hierarchy when using multiple inheritance.

Why We Use Virtual Base Class?

  • The use of a virtual base class ensures that only one shared instance exists in memory.
  • Virtual base class prevents duplicate base class copies in multiple inheritance.
  • Virtual base classes provide efficient memory management.
  • It avoids redundant copy of base class variables.
  • It saves memory and eliminates unnecessary constructor calls.

Example of Virtual Base Class

In this example, when a class is inherited multiple times through different derived classes a diamond structure forms ?

#include <iostream>
using namespace std;

class A {
public:
    int value = 100;
};

class B : virtual public A {};  
class C : virtual public A {};  

class D : public B, public C {
public:
    void show() {
        cout << "Value: " << value << endl;
    }
};

int main() {
    D obj;
    obj.show();
    return 0;
}

The following is the output of the above code ?

Value: 100

Example: Student Information

In the following example, we are implementing virtual base classes to solve multiple inheritance issues ?

#include <iostream>
using namespace std;

// Virtual base class
class Student {
   public: string name = "Aman Kumar";
   int roll_no = 01;

   void showData() {
      cout << "Name: " << name << ", Roll No: " << roll_no << endl;
   }
};

class Sports: virtual public Student {
   public: int sports_score = 85;

   void showSportsData() {
      cout << "Sports Score: " << sports_score << endl;
   }
};

class Academics: virtual public Student {
   public: int academic_score = 90;

   void showAcademicData() {
      cout << "Academic Score: " << academic_score << endl;
   }
};

class Result: public Sports, public Academics {
   public: void displayResult() {
      showData();
      showSportsData();
      showAcademicData();
      cout << "Total Score: " << (sports_score + academic_score) << endl;
   }
};

int main() {
   Result student;
   student.displayResult();

   return 0;
}

We get the following output after executing the above code ?

Name: Aman Kumar, Roll No: 1
Sports Score: 85
Academic Score: 90
Total Score: 175
Updated on: 2025-05-20T19:30:46+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements