zoukankan      html  css  js  c++  java
  • C++异常第二篇---C++标准库异常类exception的使用

    1 继承图示 


    2 具体讲解 

    C++标准库异常类继承层次中的根类为exception,其定义在exception头文件中,它是C++标准库所有函数抛出异常的基类,exception的接口定义如下:

    namespace std {

             class exception {

             public:

                       exception() throw();   //不抛出任何异常

                       exception(const exception& e) throw();

                       exception& operator= (const exception& e) throw();

                       virtual ~exception() throw)();

                       virtual const char* what() const throw(); //返回异常的描述信息

             };

    }

    除了exception类,C++还提供了一些类,用于报告程序不正常的情况,在这些预定义的类中反映的错误模型中,主要包含逻辑错误和运行时错误两大类。

    逻辑错误主要包括invalid_argument, out_of_range, length_error, domain_error。当函数接收到无效的实参,会抛出invaild_argument异常,如果函数接收到超出期望范围的实参,会抛出out_of_range异常,等等。

    namespace std {

             class logic_error: public exception {

             public:

                       explicit logic_error(const string &what_arg);

             };

             class invalid_argument: public logic_error {

             public:

                       explicit invalid_argument(const string &what_arg);

    };

    class out_of_range: public logic_error {

             public:

                       explicit out_of_range(const string &what_arg);

    };

    class length_error: public logic_error {

             public:

                       explicit length_error(const string &what_arg);

    };

    class domain_error: public logic_error {

             public:

                       explicit domain_error(const string &what_arg);

    };

    }

    运行时错误由程序域之外的事件引发,只有在运行时才能检测,主要包括range_error, overflow_error, underflow_error。函数可以通过抛出range_eroor报告算术运算中的范围错误,通过抛出overflow_error报告溢出错误。

    namespace std {

             class runtime_error: public exception {

             public:

                       explicit runtime_error(const string &what_arg);

             };

             class range_error: public runtime_error {

             public:

                       explicit range_error(const string &what_arg);

    };

    class overflow_error: public runtime_error {

             public:

                       explicit overflow_error(const string &what_arg);

    };

    class underflow_error: public runtime_error {

             public:

                       explicit underflow_error(const string &what_arg);

    };

    }

    另外,在new头文件中定义了bad_alloc异常,exception也是bad_alloc的基类,用于报告new操作符不能正确分配内存的情形。当dynamic_cast失败时,程序会抛出bad_cast异常类,其也继承自exception类。


    转载自:http://blog.csdn.net/zhq651/article/details/8425579


    3  例子 

    #include<stdexcept>


    try
      {
      throw invalid_argument("hah");
      //throw out_of_range(" we get the outofrange error");
       }catch(invalid_argument& in)
      {
      cout<<"we catch invalid_argument"<<in.what()<<endl;
      }catch(...)
      {
      cout<<"we catch unexpected error,exit"<<endl;
      return 1;
      }

  • 相关阅读:
    swift2.2当中的inout参数的使用
    Swift的7大误区
    Swift 设计指南之 编程规范
    我为什么用 SQLite 和 FMDB 而不用 Core Data
    ios学习笔记——代理设计模式
    ios学习笔记——UIImagePickerController
    ios学习笔记——保存图片到相册
    KVC中setValuesForKeysWithDictionary: (转载)
    ios学习笔记——GCD简介
    ios学习笔记——操作队列NSOperation的基本操作
  • 原文地址:https://www.cnblogs.com/catkins/p/5270609.html
Copyright © 2011-2022 走看看