异常的处理
通过try-throw-catch语句
try
{
语句组
throw 异常类型;
}catch(异常类型)
catch可以有多个,至少有一个,catch还有一个可以处理任何异常的类型
try
{
throw 1;
}
catch(…){}
如果没有任何catch解决抛出的异常,程序就会调用terminate方法中断程序
异常可以再抛出,如果一个异常没有在本函数得到解决,那么它就会[抛到它的上一层函数
函数异常声明列表
void func()throw(int,double);这句话规定了函数可以抛出的异常类型,当然,如果你不想抛出异常,可以写throw();
栈解旋:从try到throw抛出异常前,栈上所有的对象都会被释放
异常的多态使用:
利用多态来实现printError同一个接口调用
抛出不同的错误对象
另外,C++还提供了了一套标准的异常库,主要就是让你抛出相应的异常
包含在头文件#include中
常见异常:
exception//这是所有异常的父类
{
bad_cast{};//new操作符不能正确分配内存
runtime_error//运行错误
{
overflow_error;//上溢
underflow_error;//下溢
range_error;//边界错误
system_error;//系统错误
}
logic_error //逻辑错误
{
domain_error;//域错误
invalid_argument;//非法参数
out_of_range;//访问超界
length_error;//通常指创建对象的尺寸太大
future;//未知错误
}
bad_alloc{};
}
具体用法
void dowork()
{
try{
throw std::out_of_range(“访问出界”);//抛出异常
}
catch(exception e)
{
std::cout<<ex.what();//打出异常信息
}
}