Ad

Saturday, July 28, 2007

What is Polymorphism?

Polymorphism means to have one interface for different methods or functions. It is the ability through which we can do different operations (by calling different functions) from the same interface.

In C++ functions and operators can be made to be polymorphic, but in this article we’ll only be discussing about polymorphic functions.

There can be two types of polymorphism which are discussed below:

Compile-Time Polymorphism: When we have two or more polymorphic function (overloaded functions) and the call to a particular function is resolved (or known) at the compile-time, it is called compile-time polymorphism.

The following example program illustrates this. Please read the comments for further information.

   // program to demonstrate
   // compile-time polymorphism
   #include<iostream.h>

   // -- FUNCTION  PROTOTYPES --
   // -- OVERLOADED FUNCTIONS --
   void func(int);
   void func(char *);
   // --       ENDS           --

   void main()
   {
     // by seeing the argument
     // passed, anyone can tell
     // which version of the
     // function is being called
     // hence call to particular 
     // polymorphic functions is
     // resolved or known at the
     // time of compilation
     func(10);
     func("Polymorphism");
   }

   void func(int a)
   {
     cout<<a;
     cout<<endl;
   }

   void func(char *str)
   {
     cout<<str;
     cout<<endl;
   }

Run-Time Polymorphism: When the call to a particular function (out of the many polymorphic functions) is not resolved (or known) until execution then it is called run-time polymorphism.

The following example program illustrates this. Pay extra attention to the comments!


   // Program to demonstrate
   // run-time polymorphism
   #include<iostream.h>

   // -- FUNCTION PROTOTYPES --
   void func1();
   void func2();
   // --       ENDS          --

   void main()
   {
     int ch=0;
     // here pointer to function
     // is declared which will
     // be used to call one of 
     // the two functions
     void (*ptr)();

     while(ch!=3)
     {
       cout<<"1> Call Func1";
       cout<<"\n2> Call Func2";
       cout<<"\n3> Quit\n";

       cin>>ch;

       switch(ch)
       {
        case 1:
         // make 'ptr' point
         // to func1
         ptr=func1;
         break;

        case 2:
         // make 'ptr' point
         // to func2
         ptr=func2;
         break;
       }

       // call whichever
       // function is selected
       // PLEASE NOTE THAT IT IS
       // NOT POSSIBLE TO TELL
       // WHICH OF THE TWO 
       // FUNCTION WILL BE 
       // CALLED. HENCE CALL
       // TO A PARTICULAR
       // PLOYMORPHIC FUNCTION
       // REMAINS UNRESOLVED
       (*ptr)();
     }
   }

   // -- FUNCTIONS DEFINITION --
   void func1()
   {
     cout<<"Called Func1!\n";
   }

   void func2()
   {
     cout<<"Called Func2!\n";
   }
   // --         ENDS         --

Good-Bye!

Related Articles:

2 comments:

  1. i understood it well thank you

    ReplyDelete
  2. @ Sumana,

    It's my pleasure.

    ReplyDelete

You are free to comment anything, although you can comment as 'Anonymous' it is strongly recommended that you supply your name. Thank You.

Please don't use abusive language.