当前位置: 首页 > news >正文

学习记录——day43 C++ 异常处理

一、异常处理的格式

1、在可能产生异常的地方使用关键字:throw 抛出异常
2、try
    {
        可能会抛出异常的语句    
    }catch(接收异常的形参)
    {
        处理异常    
    }

 任何函数在定义时,可以指定能抛出的异常格式如下

返回值类型 函数名(形参列表) throw(异常类型1,异常类型2,。。。。) 

        定义时 throw 没有不影响函数体内 throw 的使用,系统会自动匹配,如果有,内外类型要一致,不能缺少

        对于一定不会抛出异常的函数,可用 noexcept 修饰

返回值类型 函数名(形参列表) noexcept

         修饰后,函数体内不能使用 throw

例子

#include <iostream>using namespace std;int sanjiao(int a,int b,int c)
{if(a+b<=c||a+c<=b||b+c<=a || a <= 0 || b <= 0 || c <= 0 ){throw length_error("长度不正确,不能构成三角形");}return a+b+c;
}int main()
{int a,b,c,sum;cin>>a;cin>>b;cin>>c;try {sum = sanjiao(a,b,c);} catch (length_error &e) {cout<<e.what()<<endl;}cout<<sum<<endl;return 0;
}

二、构造和析构中的异常

1、程序收到一个异常
2、初始化异常参数
3、将从对应的try语句块内处理异常,并调用析构函数完成对对象的析构
4、处理最后一个catch语句 

#include <iostream>using namespace std;//自定义异常类
class MyException
{
public:MyException() {}MyException(string m):err_msg(m) {}~MyException() {}string what(){return err_msg;}      //返回本次异常的错误信息private:string err_msg;
};//定义一个测试类
class Demo
{
public:Demo() {cout<<"Demo ::构造函数"<<endl;}~Demo() {cout<<"Demo ::析构函数"<<endl;}
};//定义全局函数
void fun() throw(MyException)
{Demo d;         //构造一个对象throw(MyException("抛出异常"));     //抛出自定义的异常cout<<"此处省略一万行代码"<<endl;
}int main()
{try {fun();cout<<"---------"<<__LINE__<<"---------"<<endl;} catch (MyException &e) {cout<<"异常信息:"<<e.what()<<endl;}return 0;
}

5、系统提供的异常类

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 4.人事管理系统(springbootvue项目)
  • Java 排序算法详解
  • 浅谈:CDN下真实IP的暴露
  • 阿尔泰科技案例解析-炼钢厂设备监测解决方案!
  • MySQL——视图(二)视图管理(7)删除视图
  • 正确的功能可将热晶体管风速计线性化
  • 基于SpringBoot的口腔管理平台
  • Linux平台屏幕|摄像头采集并实现RTMP推送两种技术方案探究
  • 利用发电量和气象数据分析来判断光伏仿真系统的准确性
  • 制作PPT流程图必备!掌握这些技巧轻松绘制流程图,简单又漂亮!
  • CPP/C语言中的位运算
  • Spring中FactoryBean的高级用法实战
  • 500W逆变器(一)
  • 2024国赛数学建模A题B题C题D题E题思路资料模型
  • opencascade源码学习之HLRAlgo包 -HLRAlgo
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Android 架构优化~MVP 架构改造
  • Mysql5.6主从复制
  • Redis的resp协议
  • Webpack 4x 之路 ( 四 )
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 百度小程序遇到的问题
  • 包装类对象
  • 从零开始在ubuntu上搭建node开发环境
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 前端
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 携程小程序初体验
  •  一套莫尔斯电报听写、翻译系统
  • 用Visual Studio开发以太坊智能合约
  • Java总结 - String - 这篇请使劲喷我
  • python最赚钱的4个方向,你最心动的是哪个?
  • 如何用纯 CSS 创作一个货车 loader
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​力扣解法汇总946-验证栈序列
  • !$boo在php中什么意思,php前戏
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (rabbitmq的高级特性)消息可靠性
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (回溯) LeetCode 40. 组合总和II
  • (汇总)os模块以及shutil模块对文件的操作
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • .net core Redis 使用有序集合实现延迟队列
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .Net Winform开发笔记(一)
  • .NET 通过系统影子账户实现权限维持
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET微信公众号开发-2.0创建自定义菜单
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • [20140403]查询是否产生日志
  • [android] 练习PopupWindow实现对话框
  • [Android]如何调试Native memory crash issue