
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
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
Advertisements