前言
标准异常类体系如下: 缩进层次表示继承关系
- 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>
- runtime_error
它们都是类。需要引用的头文件已经标注。没有标的,那么它的头文件就是上一层
的头文件。
.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;
}
结果:
exception类有默认构造函数
另外
所有不存在默认构造函数的类都可以使用string类型作为参数,例如:
string s("123");
logic_error e(s);
cout<<e.waht()<<endl;// 123
待续
先写这么多吧,考试要紧,先去复习电工了。。。