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