Following is the source code of simple queue implementation with the help of Inheritance and Polymorphism i.e. Late Binding.
In inheritance, a class (derived class) inherits the features i.e. methods and properties from the parent class (base class). Polymorphism occurs when multiple classes are inherited from each other. Here call to a member function (of the class) causes a different function to be executed (from the classes linked via inheritance) depending on the type of object that invokes the function.
#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(); } }