c++標準異常類和自定義異常物件
阿新 • • 發佈:2019-01-08
前言
標準異常類體系如下: 縮排層次表示繼承關係
- 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
待續
先寫這麼多吧,考試要緊,先去複習電工了。。。