【干货】C++异常处理的三种工具
程序运行时有时会遇到错误,导致程序无法正常运行下去,通常程序员会试图预防这种意外。C++异常为处理这种情况提供了一种功能强大而灵活的工具。这里仅介绍三种:
调用abort()函数异常机制exception 类
一、调用abort()函数
(资料图片仅供参考)
abort()函数的原型位于头文件cstdlib(或stdlib.h)中,其典型实现是向标准错误流(即cerr使用的错误流)发送 abnormal program termination(程序异常终止),然后终止程序。调用Abort()时,不进行任何清理工作,直接终止程序。
示例程序1
#include"iostream"#include"cstdlib"using namespace std;double hmean(double a, double b);int main(){double x, y, z;cout << "Enter two numbers:";while (cin >> x >> y){z = hmean(x, y);cout << "Harmonic mean of" << x << "and" << y << "is" << z << endl;cout << "Enter next set of numbers:";}cout << "end" << endl;system("pause");return 0;}double hmean(double a, double b){if (a == -b){cout << "unenable arguments to hmean()" << endl;abort();}return 2.0*a*b / (a + b);}
二、异常机制
C++异常是对程序运行过程中发生的异常情况的一种响应。异常提供了将控制权从程序的一个部分传递到另一部分的途径。对异常的处理有3个组成部分:
1.引发异常;
2.使用处理程序捕获异常;
3.使用try块。
C++异常处理的格式
try{ //标识可能出现的异常代码段 throw 抛出一个异常} catch { //异常处理程序的类型}
try块标识其中特定的异常可能被激活的代码块,它后面跟一个或多个catch块。throw语句实际是跳转,即命令程序跳转到另一条语句。Throw关键字表示引发异常,紧跟后面的值(例如字符串或对象),指出异常特征。Thow语句类似执行返回语句,因为他将终止函数的执行;但throw不是将控制权返回给调用程序,而是导致程序沿函数调用顺序后退,直到找到包含try块的函数。如果函数引发异常,而没有try块或没有匹配的处理函数,程序最终降调用abort()函数。 示例程序2
#include"iostream"#include"cstdlib"using namespace std;double hmean(double a, double b);int main(){double x, y, z;cout << "Enter two numbers:";while (cin >> x >> y){ try{ z = hmean(x, y); }catch (const char *s){cout << s<< endl;//cout << "Harmonic mean of" << x << "and" << y << "is" << z << endl;cout << "Enter next set of numbers:";continue;}cout << "Harmonic mean of" << x << "and" << y << "is" << z << endl;cout << "Enter next set of numbers:";}cout << "end" << endl;system("pause");return 0; }double hmean(double a, double b){if (a == -b){throw "unenable arguments to hmean()" ;}return 2.0*a*b / (a + b);}
三、exception 类
较新的C++编译器将异常合并到语言中,例如,为支持该语言,exception头文件(以前为exception.h或except.h)定义了exception类,C++可以把它作为其他异类的基类。代码可以引发exception异常,也可以将exception类作为基类,有一个名为what()的虚拟成员函数,他返回一个字符串,该字符串的特征随实现而异。然而,由于这是一个虚方法,因此可以在从exception派生而来的类中重新定义它。C++库定义了很多基于exception的异常类型。
示例程序3
#include"iostream"using namespace std;class nn_error : public std::exception {public:explicit nn_error(const std::string& msg) : msg_(msg) {}const char* what() const throw() override { return msg_.c_str(); }private:std::string msg_;};double hmean(double a, double b);int main(){double x, y, z;cout << "Enter two numbers:";while (cin >> x >> y){try{ z = hmean(x, y); }catch (const nn_error& e){cout << e.what() << endl;//cout << "Harmonic mean of" << x << "and" << y << "is" << z << endl;cout << "Enter next set of numbers:";continue;}cout << "Harmonic mean of" << x << "and" << y << "is" << z << endl;cout << "Enter next set of numbers:";}cout << "end" << endl;system("pause");return 0;}double hmean(double a, double b){if (a == -b){throw nn_error("unenable arguments to hmean()");}return 2.0*a*b / (a + b);}
标签:
相关推荐:
最新新闻:
- 当前动态:一站式的开源持续测试平台---MeterSphere
- 【干货】常见密码归纳(入门级)(上)-世界滚动
- 代码执行的意思是什么?代码执行详情介绍 环球快报
- finally的作用是什么?java异常处理之finally
- 几何学中多项式是什么?多项式是由变量以及标量的代数式吗?-焦点热文
- 链表中结点的“结”到底是哪个字?节点和结点到底有什么不同?
- 深入理解Java:SimpleDateFormat安全的时间格式化
- 【干货】C++异常处理的三种工具
- 中国最出色的互动娱乐企业之一——完美世界-每日视讯
- 智搭36合1创意搭建机器人——STEAM教育的完美课题-热资讯
- HSE配置是什么?频率4-16MHZ的使用方法
- 园方回应游客给大熊猫投喂带包装火腿肠:很气愤!
- 这款Steam新作 展现了俄罗斯人眼中的黑暗格林童话
- 天天看热讯:干货|MindSporeLite整体架构介绍
- 《街头霸王6》新解说员宣传片公开:日本少女冠军人美声甜!-天天快报
- 《怪物猎人崛起:曙光》主机发售日公开_天天精选
- 环球热头条丨《最后的生还者》PC重制版预告 配置需求公布
- 多人团队射击《恐龙浩劫》将于7月14日正式发售|世界新消息
- 《机械战警:暴戾都市》公布玩法预告延期至9月上市|每日热文
- 床头必备 奥克斯22升小冰箱258元
- 超高颜值 华硕小主机2999元|全球快看点
- 战纹2公布 登录Switch和PC_当前快讯
- 3D打印火箭即将试射
- 百亿补贴便宜100 机械师24寸显示器399元
- 快看点丨复仇爽剧《黑暗荣耀2》明天全集播出:第1季豆瓣8.9
- 【世界独家】internal_server error怎么办
- 《零:月蚀的假面》发售预告片公布 已登陆各平台_热头条
- Epic 2022年度总结:PC用户超2.3亿!送出99款游戏_聚焦
- 固定视角生存恐怖游戏《生者回声》试玩推出 世界时快讯
- 防止App恶意截图 安卓14预览版新功能
- 全球今日报丨万众期待 星空跳票到9月6日
- Homepod对手来了 SONOS新品支持空间音频
- 世界快资讯:电动提取灵魂 音波头部按摩仪149元
- 全球快资讯:索尼担忧微软收购之后COD在PS5上会更差
- 没有五险一金的公司能去吗上班_没有五险一金的公司能去吗
- 热点评!扁平疣的最佳治疗方法是什么(扁平疣的最佳治疗方法)
- 环球速读:《战争雷霆》衍生VR空战游戏《雷霆王牌》公布
- 时讯:传闻:《怪猎崛起:曙光》将于4月28日登陆PS/Xbox
- 【环球新要闻】每天少睡一两个小时算熬夜?专家提醒:大脑会变笨
- 当前头条:U20男足亚洲杯:中国队晋级八强!
- 《闪电十一人》最新作剧情来到初代25年后-世界新资讯
- 天天速递!韩国主帅希望复制02世界杯奇迹:之前能 现在也可以
- 市场监管总局公布第六批查处涉疫药品和医疗用品违法典型案例
- 世界百事通!140W 4060满血释放!ROG新款游戏本首发价9999元
- 腾讯NFT交易软件幻核APP凉了:将于6.30关闭下线
- 《雷顿教授与蒸汽新世界》新预告 支持简中
- 世界视讯!LadyGaga不会在95届奥斯卡表演 忙于拍摄《小丑2》
- 《使命召唤17:黑色行动5》Steam特别好评:T组制作必属精品
- 拒绝网红打卡拍照!宜家仓库后山姆也禁拍网红照:简讯
- 全球视点!赋能青少年健康成长 泰州首个民间社会组织“关工委”成立
- 数据显示:67%的《卧龙》Xbox玩家没能击败张梁
- 全球动态:游戏囧图:单马尾蒂法好凶 双生舞伶本尊COS来了
- 欺骗感情!90后男子承诺捐1100万没兑现成老赖:985母校怒起诉|焦点
- 环球观速讯丨黑暗童话《惊悚故事3:英格莉忏悔录》今日登陆Steam
- 矿卡崩了也没事!英伟达自信表态:我们游戏显卡也很行-天天热推荐
- 停止续约!米兰体育报:“现在不应该分心,应当全力...
- 焦点热门:PS中国发布《卧龙:苍天陨落》PS5性能宣传片 沉浸体验乱世三国
- 《生化危机4:重制版》广告疑似泄露:试玩Demo明天上线!_每日精选
- 当前信息:《蓓优妮塔起源:瑟蕾莎与迷失的恶魔》公布剧情预告片
- 重获新“声” 清华研发可穿戴人工喉咙还原准确率超90%
- 点亮尘封文明 解谜游戏《落叶城》NS版3月16日推出:快看
- 兼容 13 代酷睿,昂达推出两款主板,售价仅 449 元起
- 独居女生的浪漫之选三星BESOPKEHOME让女性拥抱自我-每日头条
- 聚焦女性健康,腾讯公益“关爱女性健康小红花日”项目启动
- 天天要闻:直降 1000 元,ROG 6 游戏手机优惠抢购,16GB+512GB 豪华配置
- iPhone 攻下日本手机一半市场,第二名夏普,小米等国产机只在 others
- 每日观点:梁朝伟称想重新尝试拍电视剧:美剧、韩剧都可接受
- 外媒:《星空》延期至9月恰好避开了大作云集的夏季
- 《原子之心》双生舞伶扮演者COS自己 自称闲暇时也会玩游戏-今头条
- 环球资讯:时隔4个月富坚义博重新公布进展 《全职猎人》新话缓慢更新
- 《星空》宣布再次延期至9月6日发售
- 《伊苏10》新情报和截图公布 可同时操控男女主战斗
- 世界快消息!云顶之弈S8.5危机选秀装备有哪些?危机选秀各阶段奖励一览
- 世界快看:速递 | 1.12亿美元助力多种中枢神经系统疾病疗法开发,新锐完成B轮融资
- 今日盘中股价莫名闪崩又恢复,舍得酒业发生了什么?