21xrx.com
2024-05-20 07:42:13 Monday
登录
文章检索 我的文章 写文章
C++异常处理流程详解
2023-07-12 02:23:58 深夜i     --     --
C++ 异常处理 流程 详解

C++是一种强大的编程语言,在使用C++编写程序时,难免会遇到各种各样的错误。为了避免错误导致程序的崩溃,C++提供了异常处理机制。

C++异常处理可以理解为程序在执行过程中发生了错误,但是并不想直接终止程序。此时,我们可以通过异常处理机制来处理错误,使程序能继续执行下去。

C++异常的抛出和捕捉主要有以下三个步骤:

1. 抛出异常

当程序执行过程中出现了错误时,我们可以通过throw语句抛出一个异常。throw语句抛出的异常是一个对象,它可以是任意类型的数据,比如数字、字符串、自定义数据类型等等。下面是一个示例:


#include<iostream>

using namespace std;

void divide(int a, int b)

{

  if(b == 0)

    throw "除数为0!";

  

  int c = a / b;

}

int main()

{

  try{

    divide(10, 0);   //调用divide函数,抛出异常

  }

  catch(const char* msg)

    cerr << msg << endl; //输出异常信息

  

  return 0;

}

此处我们定义了一个divide函数,该函数用于除法运算,若除数为0,则抛出一个字符串类型的"除数为0!"异常。在main函数中,我们通过try-catch语句捕获该异常,并输出异常信息。

2. 捕捉异常

当程序抛出了异常后,我们需要用try-catch语句来处理这个异常。try块包含我们要执行的语句,如果这些语句出现异常,则会执行catch块中的语句。下面是一个示例:


#include<iostream>

using namespace std;

void divide(int a, int b)

{

  if(b == 0)

    throw "除数为0!";

  

  int c = a / b;

}

int main()

{

  try{

    divide(10, 0);   //调用divide函数,抛出异常

  }

  catch(const char* msg)

    cerr << msg << endl; //输出异常信息

  

  return 0;

}

在上述示例中,我们使用了try-catch语句来捕获异常。在try块中调用了divide函数,该函数在除数为0的情况下会抛出异常。在catch块中,我们输出了异常信息"除数为0!"。

3. 处理异常

在捕获异常后,我们可以通过catch块中的语句来处理异常。catch块中的语句可以根据异常类型的不同而不同,比如可以输出异常信息、重新抛出异常、调用其他函数等等。下面是一个示例:


#include<iostream.h>

using namespace std;

class Circle

{

public:

  Circle(int r) {

    if (r < 0)

      throw "半径不能为负数!";

    

    radius = r;

  }

private:

  int radius;

};

int main()

{

  try {

    Circle c(-1);

  }

  catch (const char* msg)

  

    cerr << msg << endl;

    return 1;

  

  return 0;

}

在上面的示例中,我们定义了一个圆的类,其构造函数用于初始化圆的半径。在构造函数中,我们对半径进行了检查,如果半径小于0,则抛出异常。在main函数中,我们创建了一个半径为-1的圆,这将会触发Circle构造函数中的异常抛出。在catch块中,我们输出了异常信息"半径不能为负数!"。由于该异常是无法解决的,程序自动退出并返回1。

总结:C++异常处理机制可以让我们在程序出现错误时,不至于直接结束程序,能够通过捕获异常和处理异常的方式继续执行程序。在编写程序时,我们应该在合适的地方加上异常处理机制,以提高程序的鲁棒性和稳定性。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复