首页 > 其他分享 >异常

异常

时间:2023-05-19 14:55:11浏览次数:40  
标签:函数 抛出 捕获 错误码 基类 异常

一般在写程序的时候总会因为一些逻辑的疏忽,导致代码运行与预期结果不符,这时候就需要通过调试去寻找其中的逻辑漏洞,这是一件很麻烦的事情,所以不如在平时写代码时就加入一些可能出错情况的条件判断,并给出相应提示;将这些提示打印输出,这样就可以很快的排除一些出错的情况,例如出入不合法,数组访问越界,内存开辟不合理,指针为空的情况.

在纯c语言中他使用的是传统的处理错误的方式,入错误情况报一个错误码,然后通过这个错误码去查找相关错误的具体情况,但是这样的处理错误方式有缺陷,就是一些函数他的返回值本身可能就和错误码很相似,所以有可能发生错误码与正常值混淆的可能,还有就是一些一层层函数调用的错误吗返回,当最里面的函数报错时返回错误码,然后一层层返回错误码,这很麻烦.

于是在c++中有了抛异常的错误处理方式,就是在满足错误条件的地方直接抛出一个异常代码,然后在捕获这个异常,这个抛异常有两个特点解决了上面的情况.1:跑异常时可以抛出任意类型的异常,这样就可以用一个自定义类去封装这个异常,就不会发生像上面说的异常与正常返回值混淆的情况了,

2:一旦发现异常抛出就会停止继续向下执行程序,知道执行捕获异常的代码阶段.这样就不会发生将异常一层一层返回的麻烦事了.

下图中一个是抛出整形的异常,一个是捕捉系统的vector访问越界的异常:

 可以看到用try框出一个捕捉一场的范围,然后用catch捕捉特定类型的异常,所以这里catch可以与多个,并且能捕获各种类型的异常,也有可能抛出了异常但是没有捕获,所以一般都会在最后加一个...来捕获未知类型的异常.

c++中库里面有自带的异常库,在平时写代码时也要自己手动定义一些异常捕获.上面第一个就是用户手动抛出的异常类型,第二个是自带的异常.

然而在生活实际中可能一个项目要很多个人去写,每个人都报出不同的异常,会很麻烦,因为不知道要捕获什么异常,所以用的是继承体系捕获异常.

首先统一一个异常的基类,成员变量可以有异常码和异常的大概描述.

然后是一个虚函数,最好是纯虚函数,因为一定要用多态去捕获异常,所以这个虚函数必须重写.用what函数去详细描述异常情况.

 

 

 

 

可以看到,学生和老师共同继承了这个异常基类,当需要抛异常时抛出学生或老师的异常,最后用基类的引用去接收这个异常,最后只需要打印基类的异常数据就会发生多态抛出不同的异常.

标签:函数,抛出,捕获,错误码,基类,异常
From: https://www.cnblogs.com/qjwxlj/p/17415112.html

相关文章

  • 实验四 函数与异常处理
    print(sum)sum=42print(sum)definc(n):sum=n+1print(sum)returnsumsum=inc(7)+inc(7)print(sum) deffunc1(a,b,c,d,e,f):return[a,b,c,d,e,f]deffunc2(a,b,c,*,d,e,f):return[a,b,c,d,e,f]deffunc3(a,b,c,/,d,e,f):......
  • SpringBoot单元测试只${spring.profiles.active}异常
    在使用SpringBoot进行单元测试时,如果遇到「couldnotresolveplaceholder'spring.profiles.active'」的错误提示,通常是因为你在测试用例中使用了@ActiveProfiles注解来激活某些特定的配置文件,但是你的项目中并没有这些指定的配置文件。为了解决这个问题,你需要检查你的测试......
  • 实验四 函数与异常处理编程
    print(sum)sum=42print(sum)definc(n):sum=n+1print(sum)returnsumsum=inc(7)+inc(7)print(sum)deffunc1(a,b,c,d,e,f):return[a,b,c,d,e,f]deffunc2(a,b,c,*,d,e,f):return[a,b,c,d,e,f]deffunc3(a,b,c,/,d,e,f):re......
  • 实验4 函数与异常处理编程
    实验任务1实验源码:1print(sum)2sum=423print(sum)45definc(n):6sum=n+17print(sum)8returnsum910sum=inc(7)+inc(7)11print(sum)运行测试截图:答:不是。line1:内置函数line3:变量名line7:局部变量line11:全局变量  ......
  • wpf XAML 设计器异常,提示NullReferenceException 未将对象引用设置到对象
     在cs构造函数里手动注册,并且在控件的构造函数里增加判断if(DesignerProperties.GetIsInDesignMode(this)){return;}//在这里才注册Load事件cmbSpeed.Loaded+=cmbSpeed_Loaded;来源:https://www.cnblogs.com/zsx-blog/p/8311633.html ......
  • 23、常见的异常类有哪些?
    NullPointerException:空指针异常;SQLException:数据库相关的异常;IndexOutOfBoundsException:数组下角标越界异常;FileNotFoundException:打开文件失败时抛出;IOException:当发生某种IO异常时抛出;ClassCastException:当试图将对象强制转换为不是实例的子类时,抛出此异常;NoSuchMethodExceptio......
  • 记录一次全局异常告警@ExceptionHandler和HandlerExceptionResolver的问题
         最近有同事说之前写的全局异常告警,如果有@Valid的注解,在接入新写的插件告警后,返回信息不打印了。全局异常是基于@ExceptionHandler的全局异常类,主要是ServletMVC的ModelAndView返回的错误信息的捕获。代码如下:   /***@authorxxx*/@RestControlle......
  • druid使用时,发现数据库空闲太久自动关闭连接导致异常的问题
    系统启动后,创建了连接池。那如果后续超过数据库配置的最大连接时间,就会单方面的断开连接。而此时,druid并不知道,所以,在有请求访问进行数据操作的时候,使用到那个已断开的连接,就会报错。 解决方式是:回收连接池中的链接实例:timeBetweenEvictionRunsMillis:10000minEvictab......
  • 同步异常发送钉钉群实现方案
    在一些业务中,有一些同步功能,若发生了同步失败的情况,需要通知到业务产品和研发;本通知使用钉钉机器人,具体功能实现如下:.env#钉钉推送配置[Ding_push]#是否开启open=0#机器人地址syncErrorUrl='https://oapi.dingtalk.com/robot/send?access_token=xxxxx'#@成员at=13......
  • 统一异常处理
    SpringBoot中的统一异常处理Result为封装传递给前端的包装类全局异常处理/***CreatedwithIntelliJIDEA.**@Author:KeYu*@Package:com.feiyu.common.exception*@Date:2023/05/17/9:05*@说明:统一异常处理*/@ControllerAdvicepublicclassGlobalE......