今天继续学习上次博客提到的C++项目。今天学习异常处理,异常处理也是C++里面重要的内容。
异常处理关键字
异常处理有三个关键字try,catch和throw
throw用于抛出异常
catch用于捕获异常
try块代码用于激活特定异常
在编写catch时前面必须有try代码块。
定义简单的栈以实践
下面定义了一个大小固定的栈。定义了两个异常类。看别的博客说异常类可以存储更多信息,当然这里不用异常类,简单抛出基本数据也可以。
const int MAX = 3; //栈的容量
class Full //定义栈满异常类
{
public:
Full(int i) :a(i) {}
~Full();
int a;
int getvalue() { return a; }
};
class Empty //定义栈空异常类
{
public:
Empty();
~Empty();
private:
};
class Stack
{
public:
Stack();
~Stack();
void push(int i);
int pop();
private:
int top;
int s[MAX];
};
Stack::Stack()
{
top = -1;
}
void Stack::push(int i)
{
if (top>=MAX-1)
{
throw Full(i); //判断栈是否已满,满了抛出异常类
}
else
{
s[++top] = i;
}
}
int Stack::pop()
{
if (top==-1)
{
throw Empty(); //判断栈是否为空,为空抛出异常类
}
else
{
return s[top--];
}
}
int main()
{
Stack a;
/*try
{
a.push(10);
a.push(20);
a.push(30);
a.push(40);
}*/ //尝试为栈添加4个元素,会抛出栈满了的异常
try
{
a.pop(); //尝试抛出空栈的栈顶元素,会抛出栈空了的异常
}
catch (Full &e) {
cout << "Stack Full" << endl;
} //捕获异常
catch (Empty &f) {
cout << "Stack Empty" << endl;
} //捕获异常
cout << "After catch" << endl;
}