
- C++ Basics
- C++ Home
- C++ Overview
- C++ Environment Setup
- C++ Basic Syntax
- C++ Comments
- C++ Data Types
- C++ Variable Types
- C++ Variable Scope
- C++ Constants/Literals
- C++ Modifier Types
- C++ Storage Classes
- C++ Operators
- C++ Loop Types
- C++ Decision Making
- C++ Functions
- C++ Numbers
- C++ Arrays
- C++ Strings
- C++ Pointers
- C++ References
- C++ Date & Time
- C++ Basic Input/Output
- C++ Data Structures
- C++ Object Oriented
- C++ Classes & Objects
- C++ Inheritance
- C++ Overloading
- C++ Polymorphism
- C++ Abstraction
- C++ Encapsulation
- C++ Interfaces
What is a virtual base class in C++?
The virtual base class is used when a derived class has multiple copies of the base class.
Example Code
#include <iostream> using namespace std; class B { public: int b; }; class D1 : public B { public: int d1; }; class D2 : public B { public: int d2; }; class D3 : public D1, public D2 { public: int d3; }; int main() { D3 obj; obj.b = 40; //Statement 1, error will occur obj.b = 30; //statement 2, error will occur obj.d1 = 60; obj.d2 = 70; obj.d3 = 80; cout<< "\n B : "<< obj.b cout<< "\n D1 : "<< obj.d1; cout<< "\n D2: "<< obj.d2; cout<< "\n D3: "<< obj.d3; }
In the above example, both D1 & D2 inherit B, they both have a single copy of B. However, D3 inherit both D1 & D2, therefore D3 have two copies of B, one from D1 and another from D2.
Statement 1 and 2 in above example will generate error, as compiler can't differentiate between two copies of b in D3.
To remove multiple copies of B from D3, we must inherit B in D1 and D3 as virtual class.
So, above example using virtual base class will be −
Example Code
#include<iostream> using namespace std; class B { public: int b; }; class D1 : virtual public B { public: int d1; }; class D2 : virtual public B { public: int d2; }; class D3 : public D1, public D2 { public: int d3; }; int main() { D3 obj; obj.b = 40; // statement 3 obj.b = 30; // statement 4 obj.d1 = 60; obj.d2 = 70; obj.d3 = 80; cout<< "\n B : "<< obj.b; cout<< "\n D1 : "<< obj.d1; cout<< "\n D2 : "<< obj.d2; cout<< "\n D3 : "<< obj.d3; }
Output
B : 30 D1 : 60 D2 : 70 D3 : 80
Now, D3 have only one copy of B and statement 4 will overwrite the value of b, given in statement 3.
- Related Articles
- Virtual base class in C++
- What is a base class in C#?
- What is the base class for all exceptions in C#?
- What is the base class for errors and exceptions in Java?
- How base-class is defined in Swift?
- What is the base class for all data types in C#.NET?
- What is a virtual image? Give one situation where a virtual image is formed.
- What happens when a virtual function is called inside a non-virtual function in C++
- What is Virtual LAN?
- What is Virtual Memory?
- What is a Virtual Circuit Identifier (VCID)?
- What is Base?
- What is JVM, Java virtual machine?
- What is Java Virtual Machine (JVM)?
- What is virtual circuit packet switching?

Advertisements