千家信息网

C++中异常处理的示例分析

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章主要介绍C++中异常处理的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、背景程序运行时常会碰到一些异常情况,例如:做除法的时候除数为 0;用 new 运算符
千家信息网最后更新 2025年02月01日C++中异常处理的示例分析

这篇文章主要介绍C++中异常处理的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

一、背景

程序运行时常会碰到一些异常情况,例如:

  • 做除法的时候除数为 0;

  • 用 new 运算符动态分配空间时,空间不够导致无法分配;

  • 访问数组元素时,下标越界;打开文件读取时,文件不存在。

这些异常情况,如果不能发现并加以处理,很可能会导致程序崩溃。
所谓"处理",可以是给出错误提示信息,然后让程序沿一条不会出错的路径继续执行;也可能是不得不结束程序,但在结束前做一些必要的工作,如将内存中的数据写入文件、关闭打开的文件、释放动态分配的内存空间等。

二、C++ 异常处理

C++ 引入了异常处理机制。

异常提供了一种转移程序控制权的方式。C++ 异常处理涉及到三个关键字:try、catch、throw

  • throw: 当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的。

  • catch: 在您想要处理问题的地方,通过异常处理程序捕获异常。catch 关键字用于捕获异常。

  • try: try 块中的代码标识将被激活的特定异常。它后面通常跟着一个或多个 catch 块。

举个例子

#include   #include   using namespace std;  int main () {     try         {                 throw 1;                 throw "error";         }         catch (const char* str)         {                 cout << str << endl;         }         catch (int i)         {                 cout << i << endl;         }}

运行结果

也可以自己定义异常类来进行处理:

#include #include using namespace std;//可以自己定义Exceptionclass myexception: public exception{        virtual const char* what() const throw()        {                return "My exception happened";        }}myex;int main () {        try        {                    if(true)    //如果,则抛出异常;                        throw myex;        }        catch (exception& e)        {                cout << e.what() << endl;        }        return 0;}

三、抛出异常与捕获异常

可以使用 throw 语句在代码块中的任何地方抛出异常。throw 语句的操作数可以是任意的表达式,表达式的结果的类型决定了抛出的异常的类型。

以下是尝试除以零时抛出异常的实例:

#include using namespace std;double division(int a, int b){   if( b == 0 )   {      throw "Division by zero condition!";   }   return (a/b);}int main (){   int x = 50;   int y = 0;   double z = 0;   try {     z = division(x, y);     cout << z << endl;   }catch (const char* msg) {     cerr << msg << endl;   }   return 0;}

运行结果

四、catch(...)的作用

  catch(…)能够捕获多种数据类型的异常对象,所以它提供给程序员一种对异常对象更好的控制手段,使开发的软件系统有很好的可靠性。因此一个比较有经验的程序员通常会这样组织编写它的代码模块,如下:

void Func(){  try  {    // 这里的程序代码完成真正复杂的计算工作,这些代码在执行过程中    // 有可能抛出DataType1、DataType2和DataType3类型的异常对象。  }  catch(DataType1& d1)  {  }  catch(DataType2& d2)  {  }  catch(DataType3& d3)  {  }  catch(…)  {  }}

例子

 double division(int a, int b) {         if (b == 0) {                 throw "Division by zero condition!";         }         return (a / b); } int main() {         try         {                 int res = division(10,0);         }         catch (...)         {                 cout << " * ********" << endl;         }     return 0;}

以上是"C++中异常处理的示例分析"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

0