1. 程式人生 > 實用技巧 >面向物件入門(四十八)異常介面宣告

面向物件入門(四十八)異常介面宣告

異常介面宣告也稱為丟擲列表, 是函式介面的一部分, 一方面顯式的給出了一個函式丟擲異常的介面, 一方面限制了函式丟擲異常的型別.
通過異常介面宣告可以知道呼叫該函式需要捕獲和處理哪些異常.
語法:
1 指定異常
<返回型別> <函式名>(<形參表>)throw(T1, T2, ..., Tn);
這種異常宣告方式指定該函式可以丟擲型別為T1, T2, ..., Tn的異常和其子型別的異常. 若在函式內丟擲其他型別異常, 則無法捕獲呼叫
catch()塊, 系統將呼叫abort()函式終止程式 2 不丟擲異常
<返回型別> <函式名>(<形參表>)throw();
這種異常型別宣告表示該函式不丟擲任何異常 3 丟擲任意型別的異常
<返回型別> <函式名>(<形參表>);
不使用throw關鍵字宣告, 表示該函式可以丟擲任意型別的異常 程式碼示例:
#include <iostream>
#include <fstream>
#include <time.h>
using namespace std;

/*
異常介面宣告也稱為丟擲列表, 是函式介面的一部分, 一方面顯式的給出了一個函式丟擲異常的介面, 一方面限制了函式丟擲異常的型別.
通過異常介面宣告可以知道呼叫該函式需要捕獲和處理哪些異常.
語法:
1 指定異常
<返回型別> <函式名>(<形參表>)throw(T1, T2, ..., Tn);
這種異常宣告方式指定該函式可以丟擲型別為T1, T2, ..., Tn的異常和其子型別的異常. 若在函式內丟擲其他型別異常, 則無法捕獲呼叫
catch()塊, 系統將呼叫abort()函式終止程式

2 不丟擲異常
<返回型別> <函式名>(<形參表>)throw();
這種異常型別宣告表示該函式不丟擲任何異常

3 丟擲任意型別的異常
<返回型別> <函式名>(<形參表>);
不使用throw關鍵字宣告, 表示該函式可以丟擲任意型別的異常
*/ void test(int) throw(int, char); void handler(int); tm now; ofstream log_67("log_no67.txt", ios::app); static int exeCount = 0; int main() { exeCount++; cout << "program start" << endl; int i = 1; handler(i); i = -1; handler(i); handler(0); cout << "
program end" << endl; log_67.close(); return 0; } void test(int i) throw(int, char) { if (i > 0) throw i; if (i < 0) throw char(i); if (i == 0) { log_67 << "程式執行時刻" << clock() << endl; log_67 << "丟擲未給定型別的異常, 程式將被終止!" << endl; throw double(i); } } void handler(int i) { try { test(i); } catch (int) { log_67 << "程式執行時刻" << clock() << endl; log_67 << "捕獲一個int型別異常" << endl; } catch (char) { log_67 << "程式執行時刻" << clock() << endl; log_67 << "捕獲一個char型別異常" << endl; } }