- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C++ 异常处理 入门 试试
异常:程序执行期间,可检测到的不正常情况。
例如:0作除数;数组下标越界;打开不存在的文件;远程机器连接超时;malloc失败等等。
程序的两种状态:
正常状态和异常状态,发生不正常情况后,进入异常状态,从当前函数开始,按调用链的相反次序,查找处理该异
常的程序片断。
1.throw 表达式
语义:用表达式的值生成一个对象(异常对象),程序进入异常状态。
Terminate函数,终止程序的执行。
2.try-catch语句
try{
包含可能抛出异常的语句;
}catch(类型名 [形参名]){
}catch(类型名 [形参名]){
}
例子程序:
#include iostream
#include math.h
using namespace std;
double sqrt_delta(double d){
if(d 0)
throw 1;
return sqrt(d);
}
double delta(double a, double b, double c){
double d = b * b - 4 * a * c;
return sqrt_delta(d);
}
void main()
{
double a, b, c;
cout please input a, b, c endl;
cin a b c;
while(true){
try{
double d = delta(a, b, c);
cout x1: (d - b) / (2 * a);
cout endl;
cout x2: -(b + d) / (2 * a);
cout endl;
break;
}catch(int){
cout delta 0, please reenter a, b, c.;
cin a b c;
}
}
}
3.重新抛出异常
语法: throw;
语义:重新抛出原有的异常对象。如果在throw后面有表达式,则抛出新的异常对象。
例子程序:
#include iostream
using namespace std;
void fun(int x){
try{
if(x == 1)
throw 1;
if(x == 2)
throw 1.0;
if(x == 3)
throw 1;
}catch(int){
cout catch an int in fun() endl;
}catch(double){
cout catch an double in fun() endl;
}
cout testing exception in fun()... endl;
}
void gun()
{
try{
//fun(1);
//fun(2);
//fun(3);
fun(4);
}catch(char){
cout catch a char in gun() endl;
}
cout testing exception in gun()... endl;
}
int main()
{
gun();
}
4.扑获所有异常
catch(...){
}
下面的程序是不对的:
error C2311: int : is caught by ... on line 7
#include iostream
using namespace std;
void fun()
{
try{
}catch(...){
cout catch all exception ... endl;
}catch(int){
cout catch int exception ... endl;
}
}
5.异常规范
指出函数可以抛出的所有异常类型名。
语法:值类型 函数名(形参表) throw(类型名表) 函数体
空异常规范表示不抛出异常;
例如:
warning C4297: function : function assumed not to throw an exception but does
__declspec(nothrow) or throw() was specified on the function
#include io
stream
using namespace std;
void function(int x) throw()
{
if(x == 1)
throw 1;
}
无异常规范表示可抛出任何异常。
异常规范违例,在函数的声明中并没有
文档评论(0)