c++异常处理

43 篇文章 1 订阅

在设计程序时,通常程序也会出错,程序的错误可以分为三种:语法错误,逻辑错误和运行时错误

语法错误发生在编译和链接阶段

逻辑错误是我们在编写的代码思路有问题,达不到需求目标。通过调试来解决

调试方式:通过打印信息-- printf 或者 通过IDE调试跟踪查看栈信息

运行时错误是指程序在运行期间发生的错误,C语言 --- perror

在C++,为了更好运行和维护,引入异常(Exception)机制,让我们能够捕获运行时错误,给程序一次最后说话机会

1 捕获异常

在C++中,可能借助异常机制来捕获异常

1. throw ----- 扔,抛 ----将异常继续向调用者扔或者抛

2. try{

        //正常执行的语句,但是在执行过程中,可能会抛出异常语句

        }catch(exceptionType     val)

        {

        //处理异常的语句

         }

注意事项:

1.try和catch都是C++关键字,后跟语句块,不能省略{}

2.如果异常没有发生,它就检测不到,那么catch就会捕获不异常,该语句不会执行 3.exceptionType val类型要跟被抛出来的错误的类型要保持 一致

2 异常处理的使用

try语句正常的代码逻辑,当try语句异常时,则通过throw语句抛出异常,并退出try语句
,catch语句处理异常情况
  1 当throw语句抛异常时,则会直接跳到catch语句处理
  2 catch语句允许被重载,try语句后面可以多个catch语句,但是,顺序要跟thorw保持一样
  3 不同类型的异常由不同的catch语句来捕获,顺序从上往下严格匹配,不会隐式转换
  4 catch(...)语句,它相当于else语句,表示捕获前面所有没有被定义的异常,且只能放在所
  有catch的末尾 

class Test
{

public:
    void printError()const
    {
        cout << " error -----" <<endl;
    }
};
void func()
{
   // throw 1;//抛出错误的类型为int,那么由int型的catch语句来处理
    //throw 1.0; //抛出错误的类型为double,那么由double型的catch语句来处理
    //throw 1.5f;//抛出错误的类型为float,那么由float型的catch语句来处理
    //throw "abc"; //由char const*类型的catch语句来捕获,字符串类型
    //throw string("hello");//由string类型的catch语句捕获
    //throw 类类型
    throw Test(); //throw new Test()

}
int main()
{
    try {
        func();
    } catch (int e) {
        cout << "error:" << e<<endl;
    }catch(double e){
         cout << "error:" << e<<endl;
    }catch(float e){
        cout << "error:" << e<<endl;
   }catch(char const* e){
        cout << "error:" << e<<endl;
   }catch(string e){
        cout << "error:" << e<<endl;
   }catch(const Test& e){

        e.printError();

    }catch(...){
        cout << "other type error"<<endl;
   }

    return 0;
}

3 C++中 异常类

/**
   *  @brief Base class for all library exceptions.
   *
   *  This is the base class for all exceptions thrown by the standard
   *  library, and by certain language expressions.  You are free to derive
   *  your own %exception classes, or use a different hierarchy, or to
   *  throw non-class data (e.g., fundamental types).
   */
  class exception
  {
  public:
    exception()  { }
    virtual ~exception() ;

    /** Returns a C-style character string describing the general cause
     *  of the current error.  */
    virtual const char what() const ;
  };

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值