// Eg10-10.cpp #include using namespace std; const int MAX = 3; class Full {}; // L1 堆栈满时抛出的异常类 class Empty {}; // L2 堆栈空时抛出的异常类 class Stack { private: int s[MAX]; int top; public: void push(int a); int pop(); Stack() { top = -1; } }; void Stack::push(int a) { if (top >= MAX - 1) throw Full(); s[++top] = a; } int Stack::pop() { if (top < 0) throw Empty(); return s[top--]; } int main() { Stack s; try { s.push(10); s.push(20); s.push(30); // s.push(40); //L5 将产生栈满异常 cout << "stack(0)= " << s.pop() << endl; cout << "stack(1)= " << s.pop() << endl; cout << "stack(2)= " << s.pop() << endl; cout << "stack(3)= " << s.pop() << endl; // L6 } catch (Full) { cout << "Exception: Stack Full" << endl; } catch (Empty) { cout << "Exception: Stack Empty" << endl; } return 0; }