#pragma once #include "stack.h" #include template class arrayStack : public Stack { private: T* stack; int stackTop; int length; public: arrayStack(int initialCapacity = 10); virtual ~Stack() { delete[] stack; } virtual bool empty() const override { return stackTop == -1; } virtual int size() const override { return stackTop + 1; } virtual T& top() override; virtual void pop() override; virtual void push(const T& theElement) override; }; template arrayStack::arrayStack(int initialCapacity) { length = initialCapacity; } template T& arrayStack::top() { if (stackTop == -1) throw std::invalid_argument("No Element in Stack"); return stack[stackTop]; } template void arrayStack::pop() { if (stackTop == -1) throw std::invalid_argument("Empty Stack"); if constexpr (!std::is_trivially_destructible::value) { stack[stackTop].~T(); // 只有在 T 有析构函数时才调用 } stackTop--; } template void arrayStack::push(const T& theElement) { }