VIRTUAL BASE CLASS �AND �VIRTUAL FUNCTION
Need for Virtual Base Classes
(as shown in figure)
class A are inherited twice to class D.
Example
class A
{
public:
void show()
{
cout << "Hello form A ";
}
};
class B : public A
{
};
class C : public A
{
};
class D : public B, public C
{
};
int main()
{
D object;
object.show();
}
How to resolve this issue?
Syntax 2: class C : public virtual A { };
Example
class A {
public:
int a;
A() // constructor
{
a = 10;
}
};
class B : public virtual A {
};
class C : public virtual A {
};
class D : public B, public C {
};
int main()
{
D object;
cout << "a = " << object.a;
return 0;
}
Pointers to Derived Classes
Class base
{
int a;
Public:
Base()
{a=10;}
Display()
{cout<<a;}
};
Class derived : public base
{
Int b;
Derived()
{
B=20;
}
Display()
{cout<<b;}
};
Main()
{
Base *ptr;
Base s;
Ptr=&s;
Ptr->display();
Derived d;
Ptr=&d;
Ptr->display();
}
Solution
Virtual function/Run-time Polymorphism/Dynamic Binding
Run-time polymorphism
Early binding/static binding/compile time binding
class base
{
public:
void display()
{
cout<<“base class display\n”;
}
virtual void show()
{
cout<<“base class show\n”;
}
};
Class derived:public base
{
public:
void display()
{
cout<<“derived class display\n”;
}
virtual void show()
{
cout<<“derived class show\n”;
}
};
int main()
{
base b,*ptr;
derived d;
ptr=&b;
ptr->display();
ptr->show();
ptr=&d;
ptr->display();
ptr->show();
return 0;
}