Basic Stack in C++ Using Array
Seems like a nice implementation! Here are my thoughts,


this is implicit. Consider removing this, i.e. use topPtr instead of this-&gt;topPtr. Similarly, void doesn't need to be used as an argument, consider removing void, i.e. top() instead of top(void).
Consider using std::size_t for MAX. Also, consider naming MAX as MAX_SIZE since it is slightly more descriptive. If using std::size_t, make sure not to subtract one from MAX to avoid overflow. Instead, when checking for equality, add one to the other side. 
It might be nicer to use a T* instead of an int for topPtr. nullptr could be used instead of -1 initially for topPtr.
For print consider passing a std::ostream object. This allows for decoupling and one could pass in a std::ostringstream instead of std::cout if desired.
For top and pop, consider using assert instead if/else. An exception could also be used, but I think assert is a little nicer. To include a message, use something similar assert(!empty() &amp;&amp; "Stack is empty. Can't pop");. See https://en.cppreference.com/w/cpp/error/assert. Maybe add a comment about the requirements of these functions.
Consider adding documentation for any public function. Include information such as what the function returns, requires, and modifies. For example, top requires there are element in the stack.