21xrx.com
2024-12-27 01:58:34 Friday
登录
文章检索 我的文章 写文章
C++的自定义异常:从入门到精通
2023-07-02 03:00:04 深夜i     --     --
C++ 自定义异常 入门 精通 异常处理

C++作为一门流行且常用的编程语言,不仅能够处理基本的数据类型和数据结构,而且还支持对异常情况进行精细的处理。C++中自定义异常机制,可以帮助我们在程序运行时出现错误和异常时能够更好地控制程序的行为流程。下面从入门到精通讲解C++自定义异常的实现。

### 基础:如何捕获和抛出异常

在C++中,异常的捕获和抛出异常的机制非常简单。我们可以通过try-catch语句来实现异常捕获,通过throw语句实现异常的抛出。


try

  //代码块

catch(exception_type e)

  //异常处理

在上面的代码中,try语句块中是需要被监控的程序代码,如果发生异常,则会抛出该异常。catch语句中最重要的是exception_type参数,它表示需要捕捉的异常类型,也就是C++标准库中已知的异常类或自定义的异常类型。

throw语句非常简单,它的作用是在程序中发现异常后抛出该异常。我们可以使用throw来在程序中自定义异常。

### 中级:如何自定义异常

C++提供了标准异常类,例如std::exception、std::bad_alloc、std::runtime_error等。这些异常类是所有异常类的基类,当我们需要自定义异常时,可以派生自该基类。


#include<exception>

using namespace std;

class myException:public exception{

public:

  virtual const char* what() const throw()

    return "My Exception!";

  

};

在上面的代码中,我们通过继承exception类来派生出我们自己的异常类myException。在myException类中,我们重写了父类exception中的虚函数what(),该函数返回一个指向描述异常信息的字符串的指针。

### 高级:如何在程序中应用自定义异常

有了自定义异常类,我们就可以在程序运行中发现错误并抛出异常。在这个过程中,我们可以在异常处理中使用各种C++提供的异常功能。下面是一个实际的应用场景:


#include<exception>

#include<iostream>

#include<cstdlib>

using namespace std;

class myException:public exception{

public:

  virtual const char* what() const throw()

    return "My Exception!";

  

};

int divide(int a, int b){

  if(b==0)

    throw myException();

  else

    return a/b;

}

int main(){

  int a=20;

  int b=0;

  try{

    cout<<divide(a,b)<<endl;

  }catch(myException& e){

    cout<<e.what()<<endl;

  }

  return 0;

}

在上面的代码中,我们定义了一个divide函数,该函数可以实现两数相除的功能,但是在被除数为0时,我们抛出了自定义异常类myException。在main函数中,我们使用try-catch语句来捕获该异常,并将异常的描述信息输出到控制台上。

通过本文的讲解,我们可以看到C++自定义异常的实现十分简单,但是又非常实用。在程序中如果需要自定义异常,则可以根据自己的需要,继承或者派生自己的异常类,从而更好地处理程序中的异常情况。

  
  

评论区

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