Write a C++ class that implements a stack using a dynamically allocated array. The initial size of a particular stack should be determined when it is created. When the stack fills up, you must increase the size of the array so that additional elements can be pushed onto the stack. Be sure to implement appropriate constructors, destructors and overload any relevant operators.