1. 程式人生 > >c++標準異常類和自定義異常物件

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

待續

先寫這麼多吧,考試要緊,先去複習電工了。。。