a shot of dev knowledge

Related tags

What is Polymorphism?

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.

Example

The classic example is of the Shape class and all the classes that are inherited from it, such as:

  • Rectangle

  • Triangle

  • Circle

svg viewer

Below is an example of Polymorphism.

class Shape
{
  public:
  Shape(){}
  //defining a virtual function called Draw for shape class 
  virtual void Draw(){cout<<"Drawing a Shape"<<endl;} 
};

class Rectangle: public Shape
{
  public:
  Rectangle(){}
  //Draw function defined for Rectangle class
  virtual void Draw(){cout<<"Drawing a Rectangle"<<endl;} 
};

class Triangle: public Shape
{
  public:
  Triangle(){}
  //Draw function defined for Triangle class
  virtual void Draw(){cout<<"Drawing a Triangle"<<endl;}
};

class Circle: public Shape
{
  public:
  Circle(){}
  //Draw function defined for Circle class
  virtual void Draw(){cout<<"Drawing a Circle"<<endl;}
};


int main() {
  
  Shape *s; 
  
  Triangle tri;
  Rectangle rec;
  Circle circ;
  
  // store the address of Rectangle
  s = &rec;
  // call Rectangle Draw function
  s->Draw();
  
  // store the address of Triangle
  s = &tri;
  // call Traingle Draw function
  s->Draw();
  
  // store the address of Circle
  s = &circ;
  // call Circle Draw function 
  s->Draw();
  
  return 0;
  
}

Explanation

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.

Types of Polymorphism

  • Compile time polymorphism

    • Example: Method overloading
  • Runtime polymorphism

    • Example: Method overriding