之后将各个错误码和相应的异常对应起来,一些不太重要的信息可以封装在一个异常里,比如文件打不开可能是空间不够或共享冲突...,都可以放在一起,假如以后要专门处理某一样,比如空间不够,再从相应的基类继续即可(COpenFialed)
然后你的函数应该这样实现
CMyfunc()
{
...
throw Cxxx(...);
}
而在相应的调用部分则可以这样写
void
Operation1()
{
try{
Myfunc()
}
catch(CFileException& e)//处理文件
{
PRintf("%s",e.GetDescription());
throw;//重新抛出,假如搞定就不用再抛出了
}
catch(CNetException& e)//网络
{
...
throw;
}
}
这样只要catch想要处理的异常就行了
但是你的主函数应该这样写
void main()
{
try{
Opertion1();
Operation2();
Operation.....
...
}
catch(Cxxx& e)//处理未捕捉的重要异常
{
...
}
catch(CBasicException& e)//对你所封装的错误总的处理
{
...
}
catch(...)//其他异常,未被封装,比如除0
{
...
}
}
这样处理就合理多了
而且假如在异常的描述里加上出错地点就更好了,比如出错函数名
不过千万不要将异常基类的catch写在子类的上面否则子类的catch可能永远不会工作了
比如:
try{
...
}
catch(CBasicException& e)
{
...
}
catch(CFileException(& e)
{
...
}
这样后面的catch就再也不会被执行了
另外在类的构造函数和析构函数里不能返回值的,这时就只能用异常了
进入讨论组讨论。