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: