• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++基础知识:异常处理

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1.C++中的异常处理
(1)C++ 中提供了 try和catch语句块对可能产生异常的代码进行分开处理
  -try语句块处理正常逻辑
  -catch语句块处理异常
(2)C++ 语言中通过 throw语句引发一个异常

(3)throw 语句用于将异常“对象 ” 抛出
  throw 语句将异常抛出,如果在当前函数中没有 try...catch语句能够处理该异常 , 则当前函数将立即返回
  异常被传递到上层调用函数,仍然需要try... catch语句进行处理 , 如果上层函数也没有能力处理该异常,
   如果上层函数也没有能力处理该异常 , 则异常继续向更上层函数的函数传递。。。
      如果在函数调用栈中的所有函数都无法处理抛出的异常 , 则程序异常中止。

(4)同一个 try语句块可以跟上多个catch语句块
  同一个 try语句块可以抛出多种不同类型的异常
  不同类型的异常由不同的 catch语句块负责处理
  异常被抛出后会自上而下逐一匹配 ,catch语句块异常匹配时不会进行默认类型转换

    

 

2.深入异常处理

 (1)C++ 中的catch中的 catch语句可以使用... 捕获所有的异常


catch( ... )  可以捕获所有异常但却无法得到异常信息
catch( ... ) 一般作为最后一个异常处理块出现

(2)在 catch语句块中仍然可以抛出异常



(3)在catch( ... ) 语句块中,可以通过不带参数的throw 语句抛出捕获的异常

3.异常与对象

(1)不要在构造函数中抛出异常
(2)在构造函数可能申请系统资源 , 而在构造函数中抛出异常会导致对象构造不完全
(3)不完全对象的析构函数是不会被调用的 , 因此可能造成资源泄漏

构造函数中的异常示例:

4.工程中的异常应用

 (1)在工程中会定义一系列的异常类
(2)通过继承 , 可以得到一个异常类族
(3)每个类代表工程中可能出现的一种异常类型
 (4)由于对象构造与拷贝的开销 , 在定义 catch语句块时使用引用作为参数
 (5)在工程中可以使用标准库中的异常类
(6)可将标准库中的异常类作为基类派生新的异常类
(7)标准库中的异常都是从exception类派生的
(8)exception类有两个主要的分支
    logic_error 用于描述程序中出现的逻辑错误
    如 : 传递无效参数
     runtime_error 用于描述无法预料的事件所造成的错误
    如 : 内存耗尽 , 硬件错误

 5.标准库中的异常

 (1)logic_errorruntime_error都提供了一个参数为字符串的构造函数, 这样就可以保存错误信息
(2)通过what()成员函数就可以得到错误的信息

 

(3)logic_error

invalid_argument:无效参数
length_error:可能超越了最大极限
......

 

class logic_error : public exception {
public:
  explicit logic_error (const string& what_arg);
};

class invalid_argument : public logic_error {
public:
  explicit invalid_argument (const string& what_arg);
};

class out_of_range : public logic_error {
public:
  explicit out_of_range (const string& what_arg);
};

class length_error : public logic_error {
public:
  explicit length_error (const string& what_arg);
};

class domain_error : public logic_error {
public:
  explicit domain_error (const string& what_arg);
};

(4)runtime_error

range_error:内部计算时发生区间错误

overflow_error:算数运算时发生上溢

underflow_error:算数运算时发生下溢
......

class runtime_error : public exception {
public:
  explicit runtime_error (const string& what_arg);
};

class range_error : public runtime_error {
public:
  explicit range_error (const string& what_arg);
};

class overflow_error : public runtime_error {
public:
  explicit overflow_error (const string& what_arg);
};

class underflow_error : public runtime_error {
public:
  explicit underflow_error (const string& what_arg);
};

 

6.函数级try语法

可以将函数体作为一个完整的try语句块

函数级 try语法可以更好将正常逻辑代码与异常处理代码分开,提高代码的可读性与维护性 。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++文件操作方法小结发布时间:2022-07-13
下一篇:
C++istream::peek()发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap