Queue using dynamic array in C++

Implementation queue datastructure using dynamic array. 
Github: sourcecode/queueusingdynamicarray.h

#include <iostream>
using namespace std;

#define MAX_CAPACITY 10

/* queue class using dynamic array*/
template <typename T> class queueArray
{
private:
	T* queue; //queue data pointer
	int size; //size of the queue
	int capacity; //capacity of the queue
	int front; //front element of the queue
	int rear; //last element of the queue

public:
	//constructor
	queueArray() :queue(nullptr), size(0), capacity(MAX_CAPACITY), front(-1), rear(-1)
	{	
		//create the dynamic array based on the MAX_CAPACITY 
		queue = new T[capacity];
	}

	queueArray(int cap) :queue(nullptr), size(0), capacity(cap), front(-1), rear(-1)
	{
		//create the dynamic array based on the capacity 
		queue = new T[capacity];
	}

	//return true, if size of the queue is zero
	bool isEmpty()
	{
		return (size == 0) ? true : false;
	}

	//add the element to queue
	void enqueue(T elem)
	{
		//adding first element
		if (isEmpty())
		{
			front = 0; //front updated to 0
			queue[++rear] = elem; //update rear value
			size++; //increase the size
		}
		else
		{
			//if size reached to max capacity
			if (size == capacity)
			{
				cerr << "queue is full" << endl;
				return;

			}
			rear = ((rear+1) % capacity);
			queue[rear] = elem;
			size++;
		}
	}

	//get the first element
	T peekfirst()
	{
		if (isEmpty())
		{
			cerr << "queue is empty " << endl;
			return -1;
		}
		else
		{
			return queue[front];
		}
	}

	//remove the element from the queue
	T dequeue()
	{
		if (isEmpty())
		{
			cerr << "queue is empty " << endl;
			return -1;
		}
		else
		{
			T data = queue[front];
			//if front and rear points to the same index, then empty the queue
			if (front == rear)
			{
				front = rear = -1;
				size=0;				
			}
			else
			{				
				size--;
				front++;
			}
			return data;
		}
		return -1;
	}

	//utility function to print the elements of the queue
	void printlist()
	{
		cout << " queue ";
		for (int i = 0; i < size; i++)
		{
			cout << queue[i] << "->";
		}
		cout << endl;
	}

};

/* unit testing */
template <typename T> class queuearraytest
{
public:
	void testexecution()
	{
		queueArray<T>* queue = new queueArray<T>();

		cout<<"queue is empty = "<<queue->isEmpty()<<endl;
		queue->enqueue(10);
		cout << "dequeu element = " << queue->dequeue() << endl;
		cout << "dequeu element = " << queue->dequeue() << endl;
		queue->enqueue(20);
		queue->printlist();

		cout<<"dequeu element = "<<queue->dequeue()<<endl;
		cout << " first element " << queue->peekfirst() << endl;;
		queue->enqueue(30);
		queue->enqueue(40);
		queue->enqueue(50);
		queue->enqueue(60);
		queue->enqueue(70);
		cout << "dequeu element = " << queue->dequeue() << endl;
		cout << "dequeu element = " << queue->dequeue() << endl;
		cout << "dequeu element = " << queue->dequeue() << endl;
		cout << "dequeu element = " << queue->dequeue() << endl;
		cout << "dequeu element = " << queue->dequeue() << endl;
		cout << "dequeu element = " << queue->dequeue() << endl;
		cout << "dequeu element = " << queue->dequeue() << endl;

		queue->enqueue(1);
		queue->enqueue(2);
		queue->enqueue(3);
		queue->enqueue(4);
		queue->enqueue(5);
		queue->enqueue(6);
		queue->enqueue(7);
		queue->enqueue(8);
		queue->enqueue(9);
		queue->enqueue(10);

		cout << "dequeu element = " << queue->dequeue() << endl;
		cout << "dequeu element = " << queue->dequeue() << endl;
		cout << "dequeu element = " << queue->dequeue() << endl;
		cout << "dequeu element = " << queue->dequeue() << endl;
		cout << "dequeu element = " << queue->dequeue() << endl;

		queue->enqueue(11);
		queue->enqueue(12);
		queue->enqueue(13);
		queue->enqueue(14);
		queue->enqueue(15);
		queue->printlist();
		queue->enqueue(11);
		queue->printlist();
		queue->enqueue(12);
		queue->printlist();
		queue->enqueue(13);
		queue->enqueue(14);
		queue->enqueue(15);

		queue->printlist();
		cout << "dequeu element = " << queue->dequeue() << endl;
		cout << "dequeu element = " << queue->dequeue() << endl;
		cout << "dequeu element = " << queue->dequeue() << endl;
		cout << "dequeu element = " << queue->dequeue() << endl;
		cout << "dequeu element = " << queue->dequeue() << endl;
		queue->printlist();
	}
};