C++ – Dynamic Polymorphism
Hello Friends,
Today, in this article we will mostly discuss about Dynamic Polymorphism and the difference between Static Polymorphism and Dynamic Polymorphism .
Static Polymorphism : If function call binding is performed at compile time. This is also known as Compile time binding / Early binding. (Please refer to previous blog for details of Static Polymorphism : C++ – Static Polymorphism )
Dynamic Polymorphism : If function call binding is performed at run time. This is also known as Run-time binding / Late binding.
Purpose of Dynamic Polymorphism :
- We can store derived class object in a base class pointer .
- Assume that : same named function is available in base class as well as derived classes (which is called function overriding , achieved by declaring method as virtual ).
- If we store a derived class object in a base class pointer and call a particular function through the base class pointer , the expectation is : it should call the function which is available in derived class (whose address is stored in base class pointer ) instead of calling the function which is available in base class . This is the goal of Dynamic polymorphism .
Let’s analyse the below program.
Sample code 1
class base { public: void show() { cout<<"user in base class"<<endl; } }; class derived:public base { public: void show() { cout<<"user in derived class"<<endl; } }; int main() { derived child; base *p = new base; /*Base class pointer which points to base class object*/ p->show(); //Call base class show() method p = &child; /*base class pointer stores the address of derived class object child*/ p->show(); //Call base class show() method getchar(); return 0; }
O/P -> user in base class user in base class
As the ideal case , we will expect that after storing the derived class object in base class pointer , the show method call should call the derived class show method . But it didn’t happen .
Here the function binding happens at compile time . As the pointer is base type , compiler will bind the function call to base class “show()” method .
In this case to call the method of the actual stored object, we have to declare the method as virtual which lead to late binding instead of compile time binding .
Note * -> We will discuss details of virtual keyword and how compiler internally handles this in next blog .
Program using virtual method:
class base { public: virtual void show() { cout<<"user in base class"<<endl; } }; class derived:public base { public: void show() override { cout<<"user in derived class"<<endl; } }; int main() { derived child; base *p = new base; p->show(); p = &child; p->show(); //This will call derived class show() method getchar(); return 0; }
O/P -> user in base class user in derived class
Difference between Static Polymorphism & Dynamic Polymorphism
Static Polymorphism | Dynamic Polymorphism |
In Compile time Polymorphism, call is resolved by the compiler. | In Run time Polymorphism, call is not resolved by the compiler. |
It is also known as Static binding, Early binding and overloading as well. | It is also known as Dynamic binding, Late binding and overriding as well. |
Overloading is compile time polymorphism where more than one methods share the same name with different parameters or signature . | Overriding is run time polymorphism having same method with same parameters or signature, but associated in a class with virtual method & its subclass. |
It is achieved by function overloading and operator overloading. | It is achieved by virtual functions and pointers. |
It provides fast execution because known early at compile time. | It provides slow execution as compare to early binding because it is known at runtime. |
Thanks for reading 🙂
Keep reading, share your thoughts, experiences. Feel free to contact us to discuss more. If you have any suggestion / feedback / doubt, you are most welcome.
Stay tuned on Knowledge-Junction, will come up with more such articles.
1 Response
[…] The virtual mechanism mostly used to accomplish the dynamic polymorphism, which we discusses in one of the previous blog C++ – Dynamic Polymorphism. […]
You must log in to post a comment.