Take a Free Course
Great engineers are always investing in themselves. Upskill yourself today.
Polymorphism is an object-oriented programming concept that refers to the ability of a variable, function, or object to take on multiple forms. In a programming language exhibiting polymorphism, class objects belonging to the same hierarchical tree (inherited from a common parent class) may have functions with the same name, but with different behaviors.
The classic example is of the Shape class and all the classes that are inherited from it, such as:
Rectangle
Triangle
Circle
Below is an example of Polymorphism:
class Shape{public:Shape(){}//defining a virtual function called Draw for shape classvirtual void Draw(){cout<<"Drawing a Shape"<<endl;}};class Rectangle: public Shape{public:Rectangle(){}//Draw function defined for Rectangle classvirtual void Draw(){cout<<"Drawing a Rectangle"<<endl;}};class Triangle: public Shape{public:Triangle(){}//Draw function defined for Triangle classvirtual void Draw(){cout<<"Drawing a Triangle"<<endl;}};class Circle: public Shape{public:Circle(){}//Draw function defined for Circle classvirtual void Draw(){cout<<"Drawing a Circle"<<endl;}};int main() {Shape *s;Triangle tri;Rectangle rec;Circle circ;// store the address of Rectangles = &rec;// call Rectangle Draw functions->Draw();// store the address of Triangles = &tri;// call Traingle Draw functions->Draw();// store the address of Circles = ˆ// call Circle Draw functions->Draw();return 0;}
In the example above,
We used virtual
keyword while defining the Draw()
functions as a virtual function is a member function which when declared in the base class can be re-defined (Overriden) by the derived classes.
At run time the compiler looks at the contents of the pointer *s
.
Since, the addresses of objects of tri
, rec
, and circ
are stored in *s
the respective Draw()
function is called.
As you can see, each of the child classes has a separate implementation for the function Draw()
. This is how polymorphism is generally used.
Compile time polymorphism
Runtime polymorphism