第六章 异常处理
确定程序出错时,执行的代码,称之为异常处理程序。三个关键词:try, throw 和catch。程序中的异常都有一个唯一的名字,可以通过创建异常类来定义一个异常。在程序发生异常时,许多情况下需要指定关于该异常的附加信息:一种解决方案是向以常类中加入成员变量,以及把参数赋予成员的构造函数,当程序捕获到这个异常时,通过检查它的成员变量,以确定有关该异常起因的更多信息。
class myexcept{
public:
int value;
myexcept(int i){
value =i;
}
}; //定义异常类
function(){
throw myexcept(5);
}
void main()
{
try{
function();
}
catch (out_of_memory & e)
{
cout<<”exception value is ”<<e.value;//异常处理过程
}
}
在一个catch中捕获多处异常:
enum fileexception {open, read, write, close};
void func()
{
throw fileexception(open);
}
void main()
{
try {
func();
}
catch(fileexception value)
{
switch(value)
{
case open :
cout<<"open error"<<endl; break;
case read:
cout<<" read error"<<endl; break;
case write:
cout<<" write error"<<endl; break;
case close:
cout<<" close error"<<endl; break;
default: break;
}
exit(1);
}
}
标准异常exception类结构图:
exception |
bad_alloc |
bab_cast |
bab_typeid |
logic_error |
ios::base_failure |
runtime_error |
bab_exception |
domain_error |
invalid_argument |
length_error |
out_of_range |
range_error |
overfloe_error |
underflow_error |
当new 失败时,抛出bad_alloc异常;当程序非预期的异常时,抛出bab_exception异常;