【第八天】C++异常的抛出、捕获以及标准异常库

一、异常的概述

        异常:是指在程序运行的过程中发生的一些异常事件(如:除0溢出,数组下标越界,所要 读取的文件不存在,空指针,内存不足,访问非法内存等等)。(异常是一个类。)异常处理就是处理程序中的错误。

        基本思想:让一个函数在发现了自己无法处理的错误时抛出(throw)一个异常,然后它的(直接或者间接)调用者能够处理这个问题。即将问题检测和问题处理相分离。遇到错误 抛出异常 捕获异常。

c++异常机制相比C语言异常处理的优势:

  1. C语言中处理异常的函数返回值标识可以忽略,但异常不可忽略。(忽略异常 程序结束)
  2. 整型返回值没有任何语义信息。而异常却包含语义信息,有时你从类名就能 够体现出来

二、异常的抛出、捕获 

        涉及到三个关键字:try、catch、throw。

  • throw: 当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的。
  • catch: 在您想要处理问题的地方,通过异常处理程序捕获异常catch 关键字用于捕获异常。
  • try: try块中放置可能抛出异常的代码,try 块中的代码被称为保护代码,块中的代码标识将被激活的特定异常。它后面通常跟着一个或多个 catch 块。

 try/catch 语句的语法如下所示: 

try
{
throw 异常值;
}
catch(异常类型1 异常值1)
{
    处理异常的代码1;
}
catch(异常类型2 异常值2)
{
    处理异常的代码2;
}
catch(...)//任何异常都捕获
{
    处理异常的代码3;
}

具体案例:

        若有异常则通过thow 操作创建一个异常对象并抛出。将可能抛出异常的程序段放到try块之中。catch子句会根据出现的先后顺序被检查,匹配的catch语句捕获并处理异常(或继续抛出异常),如果在try 段执行期间没有引起异常,那么跟在try后面的catch字句就不会执行。如果匹配的处理未找到,则运行函数terminate将自动被调用,其缺省功能调用abort终止程序。处理不了的异常,可以在 catch的最后一个分支,使用throw,向上抛。 

 以除法为例:

 三、解旋

        异常被抛出后,从进入try块起,到异常被抛掷前,这期间在栈上构造的所有对 象,都会被自动析构析构的顺序与构造的顺序相反,这一过程称为栈的解旋。

try
{
    Data ob1;
    Data ob2;
    Data ob3;
    throw 1;//抛出异常后 ob3 ob2 ob1依次自动析构(栈解旋)
}

案例说明: 

 四、异常的接口声明

        异常的接口声明:函数声明可以捕获哪些类型的异常。

函数调用写在try语句中,有相应的捕获处理语句(catch)情况下:

 捕获情况:

 五、异常变量的生命周期

编写异常类:

class MyException//异常类
{
public:
    MyException(){
        cout << "异常变量构造" << endl;
    };
    MyException(const MyException & e)
    {
        cout << "拷贝构造" << endl;
    }
    ~MyException()
    {
        cout << "异常变量析构" << endl;
    }
};

1、以普通对象 接异常值

        两次构造析构

 2、以对象指针 接异常值

有delete释放,一次构造析构

3、对象引用 接异常值(推荐使用)

不需要delete,一次构造析构

六、异常的多态

        父类引用 可以捕获搭配该父类派生出的所有子类的子类

 七、标准异常库

        C++ 提供了一系列标准的异常,定义在 <exception> 中,我们可以在程序中使用这些标准的异常。它们是以父子类层次结构组织起来的

每个异常的说明: 

 

八、编写自己的异常 

        编写自己的异常要基于标准异常,从exception上继承。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/408016.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

职业规划,电气工程师的岗位任职资格

电气工程技术人员主要是指精通电气施工技术&#xff0c;从事与电气产相关研发工作并能够解决实际问题&#xff0c;对相关资源进行最终统筹的人员。一般来说&#xff0c;这类人员主要从事绘制、审核和把关电气图纸的工作&#xff0c;在审核电气图纸的时候&#xff0c;会检查施工…

【Golang】Golang使用embed加载、打包静态资源文件

【Golang】Golang使用embed加载、打包静态资源文件 大家好 我是寸铁&#x1f44a; 总结了一篇Golang使用embed加载静态资源文件的文章✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 事情是这样的&#xff1a;前不久&#xff0c;有同学问我,golang怎么把静态资源文件打包成一…

freemarker模板引擎结合node puppeteer库实现html生成图片

效果图&#xff1a; 先看效果图&#xff0c;以下是基于freemarker模板渲染数据&#xff0c;puppeteer加载html中的js及最后图片生成&#xff1a; 背景&#xff1a; 目前为止&#xff0c;后台java根据html模板或者一个网页路径生成图片&#xff0c;都不支持flex布局及最新的c…

Spring篇----第一篇

系列文章目录 文章目录 系列文章目录前言一、不同版本的 Spring Framework 有哪些主要功能?二、什么是 Spring Framework?三、列举 Spring Framework 的优点。四、Spring Framework 有哪些不同的功能?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍…

二进制部署k8s集群之cni网络插件

目录 k8s的三种网络模式 pod内容器之间的通信 同一个node节点中pod之间通信 不同的node节点的pod之间通信 flannel网络插件 flannel的三种工作方式 VxLAN host-GW UDP Flannel udp 模式 Flannel VXLAN 模式 flannel插件的三大模式的总结 calico网络插件 k8s 组网…

高速DRAM的training

随着每一代接口(Interface)和存储(memory)的频率和速率的提高&#xff0c;信号采样以及传输变得越来越困难&#xff0c;因为数据眼(data eyes)越来越小。 为了帮助高速 I/O 握手&#xff0c;接口和存储支持越来越多的Training Modes&#xff0c;系统设计人员必须将这些Trainin…

Linux之JAVA环境配置jdkTomcatMySQL

目录 一. 安装jdk 1.1 查询是否有jdk 1.2 解压 1.3 配置环境变量 二. 安装Tomcat&#xff08;开机自启动&#xff09; 2.1 解压 2.2 启动tomcat 2.3 防火墙设置 2.4 创建启动脚本&#xff08;设置自启动&#xff0c;服务器开启即启动&#xff09; 三. MySQL安装&#xff08;…

【蓝桥杯省赛真题27】python纸张数量 中小学青少年组蓝桥杯比赛python编程省赛真题解析

目录 python纸张数量 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python纸张数量 第十二届蓝桥杯青少年组python比赛选拔赛真题 一、题目要…

前后端分离vue.js+nodejs学生考勤请假系统 _fbo36

此系统设计主要采用的是nodejs语言来进行开发&#xff0c;采用vue框架技术&#xff0c;框架分为三层&#xff0c;分别是控制层Controller&#xff0c;业务处理层Service&#xff0c;持久层dao&#xff0c;能够采用多层次管理开发&#xff0c;对于各个模块设计制作有一定的安全性…

备考2025年考研数学(三):2015-2024年考研数学真题练一练

今天&#xff0c;我们继续分享2015年-2024年的考研数学三选择题&#xff0c;随机做5道真题&#xff0c;并提供解析。看看正在备考2025年考研的你能做对几道。 考研数学和政治、英语一项&#xff0c;都是拉分大户&#xff0c;但是数学如果掌握了技巧&#xff0c;吃透了知识点的话…

科普GAI:走进生成式人工智能的世界

今天&#xff0c;我们来聊聊一个科技界热门话题——GAI&#xff08;Generative Artificial Intelligence&#xff09;&#xff0c;也就是生成式人工智能。顾名思义&#xff0c;GAI是指那些能够自己“生”出新内容的人工智能系统&#xff0c;就像一位永不停歇的创新者&#xff0…

vue3+js 实现记住密码功能

常见的几种实现方式 1 基于spring security 的remember me 功能 ​​​​​​​ localStorage 除非主动清除localStorage 里的信息 &#xff0c;不然永远存在&#xff0c;关闭浏览器之后下次启动仍然存在 存放数据大小一般为5M 不与服务器进行交互通信 cookies 可以…

Docker容器实战

"爱在&#xff0c;地图上&#xff0c;剥落~" Mysql 容器化安装 我们可以在 docker hub上&#xff0c;进入mysql的镜像仓库&#xff0c;找到适合的版本。 直接拉取镜像: docker pull mysql:latest 我们知道 msyql 的默认端口是 3306 &#xff0c;而且有密码&#x…

黑马JavaWeb开发跟学(一)Web前端开发HTML、CSS基础

黑马JavaWeb开发一.Web前端开发HTML、CSS基础 引子、Web开发介绍传统路线本课程全新路线本课程适用人群课程收获一、什么是web开发二、网站的工作流程三、网站的开发模式四、网站的开发技术 前端开发基础一、前端开发二、HTML & CSS2.1 HTML快速入门2.1.1 操作第一步第二步…

蓝桥杯14届计算思维国赛U8组包含真题和答案

十四届蓝桥杯国赛考试计算思维 U8 组 答案在底部 第一题 以下选项中,( )是由美国计算机协会设立,对在计算机领域内作出重要贡献的个人授予的奖项 。A.图灵奖 C.菲尔兹奖 B.诺贝尔奖 D.普利策奖 第二题 希希去吃寿司。餐台上摆出了许多食物,可供大家自选。如下图所示。 …

2_怎么看原理图之协议类接口之UART笔记

通信双方先约定通信速率&#xff0c;如波特率115200 一开始时&#xff0c;2440这边维持高电平 1> 开始发送时&#xff0c;由2440将&#xff08;RxD0&#xff09;高电平拉低&#xff0c;并持续一个T的时间&#xff08;为了让PC机可以反应过来&#xff09;&#xff0c;T1/波…

高级语言期末2011级A卷

1.编写函数&#xff0c;判定正整数m和n&#xff08;均至少为2&#xff09;是否满足&#xff1a;数m为数n可分解的最小质因数&#xff08;数n可分解的最小质因数为整除n的最小质数&#xff09; 提示&#xff1a;判定m为质数且m是n的最小因数 #include <stdio.h> #include…

信息安全计划:它是什么、为什么需要一个以及如何开始

每个组织都需要一个信息安全计划&#xff0c;因为数据已成为世界上最有价值的商品。与所有珍贵的东西一样&#xff0c;数据受到管理机构的严格监管&#xff0c;并且受到每个人&#xff08;包括骗子&#xff09;的觊觎。这就是网络犯罪不断增加的原因——与日益严格的合规环境同…

神经网络系列---激活函数

文章目录 激活函数Sigmoid 激活函数Tanh激活函数ReLU激活函数Leaky ReLU激活函数Parametric ReLU激活函数 &#xff08;自适应Leaky ReLU激活函数&#xff09;ELU激活函数SeLU激活函数Softmax 激活函数Swish 激活函数Maxout激活函数Softplus激活函数 激活函数 一般来说&#xf…

第三篇:CamX日志打印系统

第三篇:CamX日志打印系统 高通camx的日志主要分2大模块,UMD (user mode driver) 和KMD( kerner mode driver),也就是用户层和kernel层日志。 下面就来看下这2大块日志debug的时候该如何设置? 一、UDM日志 高通camx camera debug日志格式如下: CamX: [][] : . 例子:Ca…