C++進階篇-異常處理機制之代碼實現

本文接著上篇文章的《異常處理機制之基本思想》,將講解代碼的具體實現。

異常基本語法

C++進階篇-異常處理機制之代碼實現

  • 1) 若有異常則通過throw操作創建一個異常對象並拋擲。
  • 2) 將可能拋出異常的程序段嵌在try塊之中。控制通過正常的順序執行到達try語句,然後執行try塊內的保護段。
  • 3) 如果在保護段執行期間沒有引起異常,那麼跟在try塊後的catch子句就不執行。程序從try塊後跟隨的最後一個catch子句後面的語句繼續執行下去。
  • 4) catch子句按其在try塊後出現的順序被檢查。匹配的catch子句將捕獲並處理異常(或繼續拋擲異常)。
  • 5) 如果匹配的處理器未找到,則運行函數terminate將被自動調用,其缺省功能是調用abort終止程序。
  • 6)處理不了的異常,可以在catch的最後一個分支,使用throw語法,向上扔。

案例1:被零整除案例

C++進階篇-異常處理機制之代碼實現

案例2:

C++進階篇-異常處理機制之代碼實現

throw A將穿透函數f,g和main,抵達系統的最後一道防線——激發terminate函數.

該函數調用引起運行終止的abort函數.

最後一道防線的函數可以由程序員設置.從而規定其終止前的行為.

修改系統默認行為:

  1. 可以通過set_terminate函數修改捕捉不住異常的默認處理器,從而使得發生捉不住異常時,被自定義函數處理:
  2. void myTerminate(){cout<
  3. set_terminate(myTerminate);
  4. set_terminate函數在頭文件exception中聲明,參數為函數指針void(*)().

案例3:

構造函數沒有返回類型,無法通過返回值來報告運行狀態,所以只通過一種非函數機制的途徑,即異常機制,來解決構造函數的出錯問題。

  • 7)異常機制與函數機制互不干涉,但捕捉的方式是基於類型匹配。捕捉相當於函數返回類型的匹配,而不是函數參數的匹配,所以捕捉不用考慮一個拋擲中的多種數據類型匹配問題,例如:
C++進階篇-異常處理機制之代碼實現

catch代碼塊必須出現在try後,並且在try塊後可以出現多個catch代碼塊,以捕捉各種不同類型的拋擲。

異常機制是基於這樣的原理:程序運行實質上是數據實體在做一些操作,因此發生異常現象的地方,一定是某個實體出了差錯,該實體所對應的數據類型便作為拋擲和捕捉的依據。

  • 8)異常捕捉嚴格按照類型匹配

異常捕捉的類型匹配之苛刻程度可以和模板的類型匹配媲美,它不允許相容類型的隱式轉換,比如,拋擲char類型用int型就捕捉不到.例如下列代碼不會輸出“int exception.”,從而也不會輸出“That’s ok.” 因為出現異常後提示退出

下面是本人整理的鏈接,能夠幫助大家快速尋找文章。

【C++進階篇系列】

【Linux系統篇系列】

【C++知識點系列】

【高級網絡編程系列】

喜歡我的文章的話,就關注我吧!不要只收藏和轉發哦,每天至少兩篇編程知識給大家,都是本人多年的經驗總結!


分享到:


相關文章: