Ad

Monday, August 13, 2007

Practical Example of Using Virtual Functions II

From the past few articles we have been discussing about Virtual Functions. Before taking up another topic for discussion I thought of providing one more example of how and when virtual functions may be used. So, here it is, a practical example of virtual function.

As virtual functions and Run-Time Polymorphism goes hand-in-hand so the example here may also serve as an example of the use of run-time polymorphism.


  // Example to illustrate
  // the use of virtual functions
  // and run-time polymorphism
  #include <iostream.h>

  // -- SORT CLASS --
  class sort
  {
  protected:
    int *arr;
    int num_elmnt;

  public:
    sort(int);
    ~sort();
    void get_elmnt();
    void show_elmnt();
    virtual void do_sorting()=0;
  };

  // takes an argument
  // which is the number of
  // elements we want
  sort::sort(int x)
  {
    num_elmnt=x;
    arr=new int[num_elmnt];
  }

  sort::~sort()
  {
    // free up he allocated memory
    delete []arr;
  }

  void sort::get_elmnt()
  {
    // input elements
    cout<<"\nEnter Elements...";
    for(int i=0;i<num_elmnt;i++)
    {
      cout<<"\n#"<<i+1<<":";
      cin>>arr[i];
    }
  }

  void sort::show_elmnt()
  {
    // display the elements
    cout<<"\nElements are...";
    for(int i=0;i<num_elmnt;i++)
    {
      cout<<"\n#"<<i+1<<":";
      cout<<arr[i];
    }
  }
  // -- SORT CLASS ENDS --

  // -- BUBBLE SORT CLASS --
  class bubble_sort : public sort
  {
  public:
    // constructor only calls the 
    // base constructor with the
    // parameter
    bubble_sort(int x):sort(x){}

    void do_sorting();
  };

  void bubble_sort::do_sorting()
  {
    int temp;

    // do bubble sorting
    for(int i=0;i<num_elmnt;i++)
      for(int j=0; j<(num_elmnt-1); j++)
        if (arr[j]>arr[j+1])
        {
          temp=arr[j];
          arr[j]=arr[j+1];
          arr[j+1]=temp;
        }
  }
  // -- BUBBLE SORT CLASS ENDS --

  // -- SELECTION SORT CLASS --
  class selctn_sort : public sort
  {
  public:
    // just call the base class
    // constructor
    selctn_sort(int x):sort(x){}
    void do_sorting();
  };

  void selctn_sort::do_sorting()
  {
    int temp;

    // do selection sorting
    for(int i=0;i<(num_elmnt-1);i++)
      for(int j=i+1;j<num_elmnt;j++)
      {
        if(arr[i]>arr[j])
        {
          temp=arr[i];
          arr[i]=arr[j];
          arr[j]=temp;
        }
      }
  };
  // -- SELECTION SORT CLASS ENDS --

  void main()
  {
    bubble_sort bubble(3);
    selctn_sort selctn(5);
    sort *ptr;

    ptr=&bubble;
    ptr->get_elmnt();
    ptr->do_sorting();

    ptr=&selctn;
    ptr->get_elmnt();
    ptr->do_sorting();

    // again point to bubble
    ptr=&bubble;
    ptr->show_elmnt();

    // again point to selctn
    ptr=&selctn;
    ptr->show_elmnt();
  }

Related Articles:

3 comments:

  1. I am a T.Y.B.com student who is learning HTML and Web designing. I get a lot of learning from your blog. Thanks

    ReplyDelete
  2. @ Manjeet Kaur,

    It's my pleasure.

    ReplyDelete
  3. Anonymous12:30 PM

    Thank you very much brother Arvind for your efforts.I am very greatful to you.

    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.