Polymorphism is another important OOP concept.  Polymorphism means the ability to take more than one form.  For example, an operation may exhibit different behavior in different instances.  The behavior depends upon the types of data used in the operation.  For example, consider the operation of addition.  For two numbers, the operation will generate a sum.  If the operands were strings, then the operation
would produce a third string by concatenation.      
Fig. 2.2 illustrates that a single function name can be used to handle different number and different types of arguments.  This is something similar to a particular word having several different meanings depending on the context.
Polymorphism plays an important role in allowing objects having different internal structures to share the same external interface.  This means that a general class of operations may be accessed in the same manner even though specific actions associated with each operation may differ. Polymorphism is extensively used in implementing inheritance.   

Example:

# include <iostream.h>
int abs(int I);
long abs (long l); 
double abs(double d);
main() 
{
 cout<<abs(-10)<<"\n";
 cout<<abs(10L)<<"\n";
 cout<<abs(-12.35)<<"\n";
return 0;
}
int abs(int i)
{
 cout<<"using int method";
 return i>0?i:-i;
}
long abs(long l)
{
 cout<<"using long method";
 return l>0?l:-l; 
double abs(double d)
{
 cout<<"using double method";
 return d>0?d:-d;
}

This example proves the concept of polymorphism, i.e, the function abs() is same, but it acts differently in different places depending upon the argument we pass.