c++标准异常类和自定义异常对象

前言

标准异常类体系如下: 缩进层次表示继承关系

  • exception #include <exception>
    • runtime_error #include <stdexcept>
      • overflow_error
      • underflow_error
      • range_error
    • logic_error #include <stdexcept>
      • invalid_argument
      • length_error
      • out_of_range
      • domain_error
    • bad_alloc <new>
    • bad_exception
    • bad_cast <typeinfo>
    • bad_typeid <typeinfo>

它们都是类。需要引用的头文件已经标注。没有标的,那么它的头文件就是上一层的头文件。

.what()

它们都有一个公共的.what()成员函数,返回错误的信息。当然还有拷贝构造函数和重载的=运算符,在此不多说。
以下所有定义时带有值的都没有默认构造函数。

cout<<ex.what()<<endl;
#include<iostream>//由于vs 2017环境特殊,只引用了此头文件
using namespace std;
int main() {
    runtime_error r1("123");//没有默认构造函数,下同
    logic_error r2("456");
    overflow_error o1("o1");
    underflow_error o2("o2");
    range_error o3("o3");
    invalid_argument i1("i1");
    length_error i2("i2");
    out_of_range i3("i3");
    cout << r1.what() << endl;
    cout << r2.what() << endl;
    cout << o1.what() << endl;
    cout << o2.what() << endl;
    cout << o3.what() << endl;
    cout << i1.what() << endl;
    cout << i2.what() << endl;
    cout << i3.what() << endl;
    bad_alloc b1;
    bad_cast b2;
    bad_typeid b3;
    bad_exception b4;
    cout << b1.what() << endl;
    cout << b2.what() << endl;
    cout << b3.what() << endl;
    cout << b4.what() << endl;
    system("pause");
    return 0;
}

结果:
outcome
exception类有默认构造函数
outcome

另外

所有不存在默认构造函数的类都可以使用string类型作为参数,例如:

string s("123");
logic_error e(s);
cout<<e.waht()<<endl;// 123

待续

先写这么多吧,考试要紧,先去复习电工了。。。

猜你喜欢

转载自blog.csdn.net/u013749051/article/details/80777856
今日推荐