// ========================================================================== // Template class definition for a stack of T objects // Alice E. Fischer June 10, 2000 file: stackT.hpp // #pragma once #include "flexT.hpp" template class Stack : FlexArray { const char* Name; public: //------------------------------------------------------- Stack(const char* nm, int sz=4): FlexArray(sz), Name(nm) { cout << " Create " <& s){ fatal( " Can't shallow-copy stack %s", s.Name ); } ~Stack() { cout << " Delete " <::store[--FlexArray::n]; } T top() const { return empty() ? (T)0 : FlexArray::store[FlexArray::n-1]; } bool empty() const { return FlexArray::n == 0; } int depth() const { return FlexArray::n; } ostream& print(ostream& out) const; }; template //-------------------------------------------------------- ostream& Stack::print(ostream& out) const { out <<"\nStack has " <::print( out ); out << " ]>top\n"; return out; } template inline //------------------------------------------------- ostream& operator<< ( ostream& out, Stack& s ){ return s.print( out ); }