C++异常是对程序运行过程中发生的异常情况的一种响应,异常提供了将控制权从程序的一部分传递到另一部分的途径。异常处理由3部分组成:
引发异常;
使用处理程序捕获异常;
使用try块。
程序在出现问题时会引发异常。
try
{
可能引发异常的函数fun();
没有异常,执行的代码;
}
catch(类型声明)
{
异常处理代码;
}
fun()
{
代码;
throw "xxxx";
}
如:
try
{
z=hmean(x,y);
}
catch(const char* s)
{
std::cout<<s<<std::endl;
continue;
}
double hmean(double a,double b)
{
if(a==-b)
throw "Bad hmean() argument: a=-b not allowed!";//如果抛出异常,则s=字符串
rerturn 2.0*a*b/(a-b);
}
(2)将对象作为异常类型
通常引发异常的函数将传递一个对象,这样可以使用不同的异常类型来区分不同函数在不同情况下引发的异常,另外,对象可以携带信息,程序员可以根据这些信息来确定引发异常的原因。
class bad_hmean
{
private:
double v1;
double v2;
public:
bad_hmean(int a=0,int b=0):v1(a),v2(b){}
void mesg();
};
inline void mesg()
{
std::cout<<"hmean("<<v1<<","<<v2<<"):"<<"invalid arguments:a=-b\n";
}
函数hmean这样设计,
double hmean(double a,double b)
{
if(a==-b)
throw bad_hmean(a,b);
return 2.0*a*b/(a+b);
}
主程序:
try{
double z=hmean(x,y);
cout<<"z="<<z<<endl;
}catch(bad_hmean & bg){
bg.mesg();
cout<<"try again!"<<endl;
continue;
}