In this chapter we shall see what is virtual base class and why we need virtual base class?
We are aware of diamond problem in C++
#include<iostream> //for more C++ tutorial visit www.ProDeveloperTutorial.com using namespace std; class A { public: void display() { cout << "Hello form A \n"; } }; class B : public A { }; class C : public A { }; class D : public B, public C { }; int main() { D object; object.display(); }
Error:
Main.cpp:25:12: error: non-static member 'display' found in multiple base-class subobjects of type 'A': class D -> class B -> class A class D -> class C -> class A object.display(); ^ Main.cpp:7:10: note: member found by ambiguous name lookup void display()
We get this error because, the function “display()” is inherited 2 times. First from the Class B and another from Class C.
Hence the compiler is confused from which class the display function to be called.
This is diamond problem in C++.
To prevent this problem we need to use “virtual base class”.
Syntax for virtual base class:
Syntax 1:
class Derived : virtual public Base { };
Syntax 2:
class Derived: public virtual Base { };
Now we shall modify the above example to inherit the base class as virtual:
#include<iostream> //for more C++ tutorial visit www.ProDeveloperTutorial.com using namespace std; class A { public: void display() { cout << "Hello form A \n"; } }; class B : virtual public A { }; class C : public virtual A { }; class D : public B, public C { }; int main() { D object; object.display(); }
Output:
Hello form A
So this is the concept of virtual base class.