#include const int DIM_MAX = 10; template class Pila { public: // Costruttore di default. Pila(); // Distruttore. ~Pila(); // Inserisce l'elemento `x' nella pila. void push(T x); // Estrae un elemento dalla pila. T pop(); // Ritorna `true' se la pila e' vuota; // `false' altrimenti bool empty() const; // Ritorna la capacita' della pila. unsigned int capacita() const; // Ritorna il numero di elementi contenuti nella pila. unsigned int num_elementi() const; private: // Puntatore ad un array di int che rappresenta la pila stessa. T* A; // Indica quanti elementi ci sono nella pila. int top; // Capacita' della pila. int dim; // Raddoppia la dimensione della pila. void raddoppia(); }; template Pila::Pila() { A = new T[DIM_MAX]; top = 0; dim = DIM_MAX; } template Pila::~Pila() { delete[] A; } template void Pila::push(T x) { if (top == DIM_MAX) raddoppia(); A[top] = x; ++top; } template T Pila::pop() { if (empty()) throw "Invocato metodo `pop()' su pila vuota!"; --top; return A[top]; } template bool Pila::empty() const { if (top == 0) return true; else return false; } template unsigned int Pila::capacita() const { return DIM_MAX; } template unsigned int Pila::num_elementi() const { return top; } template void Pila::raddoppia() { T* tmp = new T[2*dim]; for (int i = 0; i < dim; ++i) tmp[i] = A[i]; delete[] A; dim *= 2; A = tmp; } //%%%%%%%%%%%%%%%%%%%%%%% main di prova int main() try { Pila P1; Pila P2; P1.push('a'); P2.push('a'); while (!P1.empty()) cout << P1.pop() << endl; while (!P2.empty()) cout << P2.pop() << endl; return 0; } catch(const char* str) { cerr << "Eccezione: " << str << endl; }