版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第深入了解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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城市绿化带养护与管理标准作业指导
- 家庭担当电子保证承诺书(7篇)
- 项目进度按期完工承诺函5篇
- 美容美发行业技术培训与店面管理方案
- 保证产品质量稳定可靠承诺书范文8篇
- 脑卒中康复护理的康复护理效益
- 面部护理的国际温泉竞争力分析
- 互联网创业公司发展计划手册
- 管道护理的专利申请
- 脑出血专科护理要点图
- 北京市2025中国文化遗产研究院应届毕业生招聘4人笔试历年参考题库典型考点附带答案详解
- 2026重庆联合产权交易所集团股份有限公司招聘13人考试备考题库及答案解析
- 2026年广东深圳市高三二模高考语文试卷试题(含答案)
- 2026年住院医师规范化培训试题【新题速递】附答案详解
- 2026年广东省广州市高三二模英语试题(含答案)
- CNCA-C09-02:2025 强制性产品认证实施规则 移动电源、锂离子电池和电池组(试行)
- 2026年天津市河东区中考一模道德与法治试卷和答案
- 贵州国企招聘2025贵州磷化(集团)有限责任公司招聘89人笔试参考题库附带答案详解
- 连续退位减法教学课件
- 2022高中学业水平考试通用技术试题库(新版)
- 基于物联网的智能图书馆设计方案
评论
0/150
提交评论