• 45.C++中的异常处理


    1.基本语法

    try{

            要运行的代码

    }

    catch(抛出的异常类型){

            捕获异常后进行处理的代码

    1. #include
    2. #include
    3. using namespace std;
    4. int Divide(int a,int b){
    5. if (b == 0){
    6. throw 1;
    7. }
    8. return a / b;
    9. }
    10. int main()
    11. {
    12. int a = 1;
    13. int b = 0;
    14. try{
    15. Divide(a,b);
    16. }
    17. catch(int){
    18. cout<<"函数计算过程中发生异常"<
    19. }

    2.异常严格类型匹配

    1. void TestFunction(){
    2. cout << "开始抛出异常..." << endl;
    3. //throw 10; //抛出int类型异常
    4. //throw 'a'; //抛出char类型异常
    5. //throw "abcd"; //抛出char*类型异常
    6. string ex = "string exception!";
    7. throw ex;
    8. }
    9. int main(){
    10. try{
    11. TestFunction();
    12. }
    13. catch (int){
    14. cout << "抛出Int类型异常!" << endl;
    15. }
    16. catch (char){
    17. cout << "抛出Char类型异常!" << endl;
    18. }
    19. catch (char*){
    20. cout << "抛出Char*类型异常!" << endl;
    21. }
    22. catch (string){
    23. cout << "抛出string类型异常!" << endl;
    24. }
    25. //捕获所有异常
    26. catch (...){
    27. cout << "抛出其他类型异常!" << endl;
    28. }
    29. system("pause");
    30. return EXIT_SUCCESS;
    31. }

     3.异常的跳级处理

            假设A调用B,B调用C,如果C中发生了异常,但是C不想或者忘记处理异常,则C将异常向上抛出,由B处理C中的异常,如果B也不想处理,则由A进行处理

    1. #include
    2. #include
    3. using namespace std;
    4. int Divide(int a,int b){
    5. if (b == 0){
    6. throw 1;
    7. }
    8. return a / b;
    9. }
    10. void test()
    11. {
    12. int a = 1;
    13. int b = 0;
    14. try{
    15. Divide(a,b);
    16. }
    17. catch(int){
    18. //cout<<"函数计算过程中发生异常"<
    19. throw; //直接写个throw,就可以将异常继续向上抛出
    20. }
    21. }
    22. int main()
    23. {
    24. try{
    25. test();
    26. }
    27. catch(int){
    28. cout<<"函数计算过程中发生异常"<
    29. }
    30. }

    4.自定义异常类 

    1. #include
    2. #include
    3. using namespace std;
    4. class MyException
    5. {
    6. public:
    7. void Dy() {
    8. cout << "发生异常" << endl;
    9. }
    10. };
    11. int Divide(int a, int b) {
    12. if (b == 0) {
    13. //第一种方式:创建匿名对象并抛出(推荐)
    14. throw MyException();
    15. //第二种方式:创建异常类对象并抛出
    16. MyException p;
    17. throw p;
    18. }
    19. return a / b;
    20. }
    21. int main()
    22. {
    23. int a = 10;
    24. int b = 0;
    25. try {
    26. Divide(a,b);
    27. }
    28. catch (MyException e) {
    29. e.Dy();
    30. }
    31. system("pause");
    32. }

     

    总结:

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

            c++异常处理使得异常的引发和异常的处理不必在一个函数中,这样底层的函数可以着重解决具体问题,而不必过多的考虑异常的处理。上层调用者可以在适当的位置设计对不同类型异常的处理。

     

  • 相关阅读:
    产业园区十大企业服务体系!
    C# OpenVinoSharp PP-TinyPose 人体姿态识别
    面向服务的架构设计理论与实践
    CentOS 7 上安装 MySQL 8.0详细步骤
    银河麒麟桌面操作系统 V10 SP1下Qt应用程序开发环境配置
    SpringBoot整合Sharding-JDBC通过标准分片策略(Standard)实现分表操作
    Leetcode226.翻转二叉树
    Java学习笔记(十五)
    Linux排查网站访问慢的原因分析
    [附源码]Python计算机毕业设计Django高校实验室仪器设备管理系统
  • 原文地址:https://blog.csdn.net/qq_41583263/article/details/127833809