C++ Tutorial: Why Virtual Functions are needed?
The following example illustrates this concept of why virtual function is necessary.
1: #include<iostream>
2:
3: using namespace std;
4: class Animal{
5: public:
6: void display(){cout<<"\nFrom Base class Animal";}
7: };
8:
9: class Cow:public Animal{
10: public:
11: void display(){cout<<"\n From Derived class Cow";}
12: };
13:
14: class Dog:public Animal{
15: public:
16: void display(){ cout<<"\nFrom Derived class Dog";}
17: };
18:
19: int main(){
20: Animal *panm; //pointer to base class
21: Animal anm;
22: Cow cw;
23: Dog dg;
24:
25: panm = &anm;
26: panm->display();
27:
28: panm=&cw;
29: panm->display();
30:
31: panm=&dg;
32: panm->display();
33: return 0;
34: }When the above program is executed, it will produce the output as:
From Base class Animal
From Base class Animal
From Base class Animal
In this program we have created pointer to the base class Animal as:
Animal *panm;
1: #include<iostream>
2:
3: using namespace std;
4: class Animal{
5: public:
6: virtual void display(){cout<<"\nFrom Base class Animal";}
7: };
8:
9: class Cow:public Animal{
10: public:
11: void display(){cout<<"\nFrom Derived class Cow";}
12: };
13:
14: class Dog:public Animal{
15: public:
16: void display(){ cout<<"\nFrom Derived class Dog";}
17: };
18:
19: int main(){
20: Animal *panm; //pointer to base class
21: Animal anm;
22: Cow cw;
23: Dog dg;
24:
25: panm = &anm;
26: panm->display();
27:
28: panm=&cw;
29: panm->display();
30:
31: panm=&dg;
32: panm->display();
33: return 0;
The output of the code is
From Base class Animal
From Derived class Cow
From Derived class Dog
