try 後面的大括弧用來放可能會發生錯誤的程式碼,在會發生錯誤的地方用 throw 丟出例外 (exception) , catch 依據例外的型態 (type) 進行處理。舉例如下
#include <iostream> int main(void) { try { if (5 > 0) { throw "something wrong..."; } } catch (const char* message) { std::cout << message << std::endl; } return 0; } /* 《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名:trydemo01.cpp 功能:示範 C++ 程式 作者:張凱慶 時間:西元 2013 年 1 月 */
這裡,如果 5 大於 0 就丟出 "something wrong..." 的例外
if (5 > 0) { throw "something wrong..."; }
對應到 catch 的部份,例外型態就是 const 的字元指標 (pointer)
catch (const char* message) { std::cout << message << std::endl; }
編譯執行結果如下
例外的型態可以是標準程式庫 (standard library) 中的型態,或是自訂的型態,例如
#include <iostream> struct BadValue : public std::exception {}; double divide(double a, double b) { if (b == 0) { throw BadValue(); } return a / b; } int main(void) { try { std::cout << divide(20, 5) << std::endl; std::cout << divide(20, 4) << std::endl; std::cout << divide(20, 3) << std::endl; std::cout << divide(20, 2) << std::endl; std::cout << divide(20, 1) << std::endl; std::cout << divide(20, 0) << std::endl; } catch (BadValue e) { std::cout << "something wrong..." << std::endl; } return 0; } /* 《程式語言教學誌》的範例程式 http://pydoing.blogspot.com/ 檔名:trydemo02.cpp 功能:示範 C++ 程式 作者:張凱慶 時間:西元 2013 年 1 月 */
這裡的 BadValue 繼承自標準程式庫中的 exception
struct BadValue : public std::exception {};
divide() 為可能發生例外的函數 (function) ,在分母 b 為 0 時就拋出例外
double divide(double a, double b) { if (b == 0) { throw BadValue(); } return a / b; }
try 部份的程式碼會逐一執行,碰到發生例外就會跳到 catch 的部份,編譯執行結果如下
中英文術語對照 | |
---|---|
例外處理 | exception handling |
關鍵字 | keyword |
例外 | exception |
型態 | type |
指標 | pointer |
標準程式庫 | standard library |
函數 | function |
您可以繼續參考
例外處理
相關目錄
回 C++ 快速導覽
回 C++ 教材
回首頁
參考資料
C++ reference
cplusplus.com
Cprogramming.com C++ Tutorial
C++ Primer, Fourth Edition, Stanley B. Lippman...
沒有留言:
張貼留言