CS35 Stack ADT

stack.h
#pragma once
/* Copyright (c) 2017
   Swarthmore College Computer Science Department, Swarthmore PA
   A. Danner, M. Gagne, J. Brody, Z. Palmer, A. Soni
   Distributed as course material for Fall 2017
   CPSC 035: Data Structures and Algorithms
 */
 
/**
 * The Stack is a pure virtual (abstract) interface of a stack.  Stack
 * implementations should inherit from and implement this interface.
 * @tparam The type of elements stored in this stack.
 */
template <typename T>
class Stack {
public:
    virtual ~Stack() { };

    /**
     * Adds an element to this stack.
     * @param element The element to add to the stack.
     */
    virtual void push(T item) = 0;

    /**
     * Removes the top element from the stack.
     * @return The element that was removed.
     * @throws runtime_error If the stack is empty.
     */
    virtual T pop() = 0;

    /**
     * Determines the size of the stack.
     * @return The number of elements in the stack.
     */
    virtual int getSize() = 0;

    /**
     * Determines whether the stack is empty.
     * @return true if the stack is empty; false otherwise.
     */
    virtual bool isEmpty() = 0;

    /**
     * Retrieves the top element of this stack (without removing it).
     * @return The top element of this stack.
     * @throws runtime_error If the stack is empty.
     */
    virtual T getTop() = 0;

    // You can safely ignore the following code.  This eliminates some default
    // class routines, preventing you from using them accidentally.
    // Specifically, we are disabling the use of the copy constructor and the
    // copy assignment operator.  You can read more here:
    //   http://www.cplusplus.com/articles/y8hv0pDG/
public:
    Stack() { }
private:
    Stack(const Stack& other) = delete;
    Stack& operator=(const Stack& other) = delete;
};