// xstak2.cpp // Демонстрация обработчика двух исключений #include using namespace std; const int MAX = 3; //в стеке может быть до трех целых чисел /////////////////////////////////////////////////////////// class Stack { private: int st[MAX]; //стек: массив целых чисел int top; //индекс верхушки стека public: class Full { }; //класс исключения class Empty { }; //класс исключения //--------------------------------------------------------- Stack() //конструктор { top = -1; } //--------------------------------------------------------- void push(int var) //занести число в стек { if(top >= MAX-1) //если стек полон, throw Full(); //генерировать исключение Full st[++top] = var; } //--------------------------------------------------------- int pop() //взять число из стека { if(top < 0) //если стек пуст, throw Empty(); //генерировать исключение Empty return st[top--]; } }; /////////////////////////////////////////////////////////// int main() { Stack s1; try { s1.push(11); s1.push(22); s1.push(33); // s1.push(44); //Опаньки: стек уже полон cout << "1: " << s1.pop() << endl; cout << "2: " << s1.pop() << endl; cout << "3: " << s1.pop() << endl; cout << "4: " << s1.pop() << endl; //Опаньки: стек пуст } catch(Stack::Full) { cout << "Ошибка: переполнение стека" << endl; } catch(Stack::Empty) { cout << "Ошибка: стек пуст" << endl; } return 0; }