Title Queue Data Structure Class Example which uses Polymorphism. Author: Sanchit Karve Visitor Submitted Source Code Author Email: born2c0de@hotmail.com Description: Example on how to use a Queue Data Structure to handle tasks using Polymorphism. Hits: 2540 Since 25th November, 2003 Code: Select and Copy the Code /* QUEUE IMPLEMENTATION With Inheritance and Polymorphism (Late Binding) -Sanchit Karve b0rn2c0de */ #include <dos.h> #include <stdlib.h> #include <iostream.h> #include <conio.h> #include <windows.h> #define MAX 5 // MAXIMUM CONTENTS IN QUEUE class task { public: virtual void dotask(){} task(){} int exists; }; class notep: public task { public: notep(){exists=1;} void dotask() { system("notepad"); } }; class regt:public task { public: regt(){exists=1;} void dotask() { system("regedit"); } }; class winex:public task { public: winex(){exists=1;} void dotask() { system("explorer"); } }; class Bep:public task { public: Bep(){exists=1;} void dotask() { cout<<"\a"; } }; class MsBox:public task { private: char* text; char* caption; int style; public: MsBox(char* ext,char* cap,int no) { text=ext; caption=cap; exists=1; style=no; } void dotask() { MessageBox(0,text,caption,style); } }; class queue { private: task *t[MAX]; int al; int dl; public: int opt,opt1,a; char te[255],capt[40]; queue() { dl=-1; al=-1; } void del() { task* tmp; if(dl==-1) { cout<<"Queue is Empty"; sleep(2); } else { t[dl]->exists=0; for(int j=0;j<=al;j++) { if((j+1)<=al) { tmp=t[j+1]; t[j]=tmp; } else { t[al]->exists=0; al--; if(al==-1) dl=-1; else dl=0; } } } } void menu() { clrscr(); cout<<"1) Add Task \n2)Execute Tasks\n3)Exit Program\n"; // int opt; cin>>opt; switch(opt) { case 1: clrscr(); cout<<"1) Open Notepad\n"; cout<<"2) Open Explorer\n" <<"3) Open Registry\n" <<"4) Sound a Beep\n" <<"5) MessageBox API\n" <<"6) Back\n"; cin>>opt1; if(opt1!=6) add(opt1); break; case 2: if(al!=-1 && dl!=-1) { for(int k=0;k<=al;k++) { if(t[k]->exists==1) t[k]->dotask(); t[k]->exists=0; } al=dl=-1; } else { cout<<"Queue is Empty"; sleep(3); } break; case 3: exit(0); break; } } void add(int item) { if(dl==-1 && al==-1) { dl++; al++; } else { al++; if(al<MAX){} else { cout<<"Queue is Full\n"; al--; sleep(3); return; } } switch(item) { case 1: t[al]=new notep; break; case 2: t[al]=new winex; break; case 3: t[al]=new regt; break; case 4: t[al]=new Bep; break; case 5: cout<<"\n Enter Style Number:"; cin>>a; t[al]=new MsBox("Task Performed.","Queue Implementation",a); break; default: cout<<"Programming Error"; // No Possibility of this executing }; } }; void main() { queue a; while(1) { a.menu(); } }