Code:
//queue.h
#define T int
class queue {
public:
virtual bool isempty()=0;
virtual void enqueue(T) = 0;
virtual T dequeue() = 0;
};
//queuea.h
#include "queue.h"
#ifndef QUEUEA_H
#define QUEUEA_H
using namespace std;
class queuea : public queue{
T *a;
int in, out;
int full;
public:
queuea();
queuea(int size);
~queuea();
bool isempty();
void enqueue(T data);
T dequeue();
};
#endif
//queuea.C
#include "queuea.h"
queuea :: queuea(){
a = new T[10];
in = out = -1;
full = 10;
}
queuea :: queuea(int size){ //constructor
a = new T[size];
in = out = -1;
full = size;
}
queuea :: ~queuea(){ //destructor
delete [] a;
cout << "queue is deleted";
}
bool queuea :: isempty(){ //check to see if queue is empty
return out == -1;
}
void queuea :: enqueue(T data){ // add a value to the queue
if (in == full-1 || in == -1){ //error trapping for ring buffer
a[0] = data;
in = 0;
if (out == -1)
out = 0;
}
else a[++in] = data;
}
T queuea :: dequeue(){ //take out value from queue
T temp;
temp = a[out];
if (out == in) //error trapping for ring buffer
in = out = -1;
else if (out == full-1)
out = 0;
else out++;
return temp;
}
//dumpfifo.C
#include <iostream>
#include "queuea.h"
//#include "queuel.h"
using namespace std;
void queuedump(queue *qptr){
while(!qptr -> isempty())
cout << qptr -> dequeue(); // print out values in queue
}
int main(){
queue *qptr = new queuea(10); // make new queue array
for(int i=0; i<14; i++) qptr -> enqueue(i); // fill queue
queuedump(qptr); //empty queue
return 0;
}
much better