




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第深入了解C++异常处理//某个函数不存在异常,在某个函数后面用throw()描述,表示它不存在异常
voidprint()throw()
cout"当前函数不存在抛出异常操作"endl;
voidprintData()noexcept
cout"c++新标准中的关键字:不存在抛出异常操作"endl;
//throw0;一旦说明没有异常操作,就不能抛出
}
删减符...
任何类型的异常都捕获
不管抛出啥,在哪里抛出的,只要引发异常都可以捕获到
catch(...)
cout"捕获任何类型的异常"endl;
}
异常处理中的传参操作
---可以写一个变量进去
catch(inta)/*隐藏了一个传参操作可以传任何类型,包括自定义类型都可以*/
注意c++中string的处理
/*string类型与constchar*类型区别*/
代码解析:
对
通过抛出字符串,隐藏了一个传参操作
的理解
intdivisor(inta,intb)
if(b==0)
throwstring("除数不能为0");
returna/b;
intmain()
divisor(1,0);
catch(stringstr)//把throw的内容赋值给strstr="除数不能为0"
coutstrendl;
}
注意string类型与constchar*类型区别
---出现类型不匹配,c++对传参类型要求更严格
intdivisor(inta,intb)
if(b==0)
throw"除数不能为0";//抛出异常解析为char*类型写catch时不能直接当作string
if(b==1)
throw"除数不能为1";/*不同问题的抛出,不能用固定类型(int、char...),可以选择
抛出不同字符串处理string1,string2,string3...通过传
参的方式去描述问题*/
if(b==2)
throwstring("除数不能为2");//需构造无名参数作捕获对象处理---需要自己触发
returna/b;
intmain()
divisor(1,0);//直接触发异常
catch(constchar*str)//抛出的是char*类型,不能当作string
coutstrendl;
divisor(1,2);
catch(stringstr)//如果要捕获string类型,需要自己构造一个string对象返回
coutstrendl;//直接输出str
}
可以抛出自己类的对象
classError
public:
Error(constchar*str="未知错误"):str(str){}
constchar*what()const
returnstr.c_str();
protected:
stringstr;
voidinsertArray(intarray[],int*curNum,intposData,intmaxLength)
if(*curNum=maxLength)//3=3
throwError("数组下标溢出!");
//012
array[*curNum]=posData;//array[3]=3
(*curNum)++;
intmain(){
intarray[3]={0,0,0};
intcurNum=0;
for(inti=0;ii++)
insertArray(array,curNum,i,3);
catch(Errorstr)
coutstr.what()endl;
return0;
}
标准库当中的异常类
#includeexception//父类(基类)
子类很多,子类描述的问题不同而已
例子:constchar*_ptr;一个数据成员,用于描述标准库当中异常的字符串,用字符指针存放那个字符串
what()方法
用于返回数据成员的
1.虚函数
2.不存在异常
return_ptr_ptr:"unknow";判断char*类型的指针是不是为空,不等于空,返回你描述的错误,等于空(由于没有传参),返回未知错误"unknow"
引发标准库中内存申请失败的异常
发现代码出现abort()错误,可以通过这种方式找到,这里是针对内存申请失败做了单一处理,如果不做处理,会直接调用abort函数终止程序
#includeexception
#includeiostream
usingnamespacestd;
classException
public:
Exception(constchar*ptr="UNKNOW"):ptr(const_castchar*(ptr)){}/*构造函数干掉
常属性*/
virtualconstchar*what()const//父类是虚函数且不存在异常
returnptr;
protected:
char*ptr;
//子类继承父类
classBad_alloc:publicException
public:
Bad_alloc(constchar*_Message="badexception"):Exception(_Message){}/*调用父类
的构造函数抛出badexception*/
protected:
//子类继承父类调用父类构造函数
classRun_time:publicException
public:
Run_time(constchar*_Message="run_timeerror"):Exception(_Message){}
protected:
intmain()
try
while(1)
int*p=newint[1024*1024*10];//一直做内存申请,不做释放,最后一定会内存申请失败
catch(bad_allocobject)/*内存申请失败,调用bad_alloc标准库中的异常,创建一个对象接收一
下,子类中的what()方法调用父类中的what()方法打印*/
coutobject.what()endl;
return0;
/*输出*/
badallocation//调用时抛出badallocation是子类对象调用继承下来的what()方法
//一般写代码出现莫名的中断,原因是不做异常处理,引发了abort函数中断程序,一般这种错误都是特殊错误
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 口腔正畸学考试题+答案
- 酒店智能管理服务协议
- 浙江国企招聘2025宁波市交通建设工程试验检测中心有限公司招聘17人笔试参考题库附带答案详解
- 2025赛迪工业和信息化研究院(集团)四川有限公司招聘8人笔试参考题库附带答案详解
- 2025年郑州航空大都市研究院有限公司下属公司招聘实习生2人笔试参考题库附带答案详解
- 高二单句语法填空+语篇填空 历史人物主题练 (解析版)3
- 安葬合同协议书
- 项目合作三方合同协议书
- 借款合同过期还款协议书
- 承包康复科合同协议书
- 农业文化创意产业园项目可行性研究报告
- 2025绿地集团购房合同样本
- 珠宝展柜租赁合同协议
- GB/T 37507-2025项目、项目群和项目组合管理项目管理指南
- 机器视觉试题答案及解析
- GB 14930.2-2025食品安全国家标准消毒剂
- 财产保险考试:非车险核保考试预测题
- 攀西地区钒钛磁铁矿铁钛综合回收试验研究
- 电商平台服务协议、交易规则
- 档案数字化存储方式试题及答案
- 《时间的故事》(教学设计)-2024-2025学年人美版(2024)美术一年级下册
评论
0/150
提交评论