1. 程式人生 > >C++之異常處理與檔案I/O

C++之異常處理與檔案I/O

異常處理
  能預見但是無法避免的錯誤
  目的
    不讓使用者在體驗時遇到異常報錯,管理員能及時維護
  丟擲異常

throw 資料;

    丟擲基本型別的異常

throw -1;
throw "";

    丟擲類型別的異常

throw Student stu;

    不要丟擲區域性變數的指標的異常
  捕獲異常

try{
    ...//產生異常的程式碼
}
catch(異常型別)
{
    ...//異常處理程式碼
}

    在捕獲異常時,不光能獲取異常,還能獲得丟擲的異常資料
    如果異常被丟擲,但沒有被捕獲,程式會結束
    異常的捕獲是自上而下的,因此子類的異常捕獲最好放在父類的前面
    捕獲異常時儘量使用引用的方式,在丟擲異常時如果使用物件的方式來捕獲就會呼叫物件的拷貝構造,這樣會在拷貝物件時再次引用引發異常
  類型別異常
    可以為每一種異常定義一個什麼都不用做的類,只是為了區分各種異常
    在丟擲異常時可能會呼叫異常的構造、拷貝構造、賦值構造等,如果在類中有看不到的資源,一定要實現這三個函式
    為了防止有自定義的異常無法被捕獲,因此我們在定義異常類時,最好都繼承標準庫的異常類,即使不能精準的捕獲異常,也能防止遺漏異常
    在丟擲異常時,儘量拋匿名臨時物件
  安全區
    編譯器會生成一段用來申請"安全區"

的程式碼並提供保護
    在異常發生後,程式的節奏已經被打亂,除了安全區之外沒有位置是安全的,安全區能保證儲存在此位置的異常物件不受破壞
  建構函式和解構函式中的異常
    在建構函式中發生了異常後,會直接跳轉到異常處理程式碼
    異常的構造中斷,物件的構造不再完整,不完整的物件永遠不可能呼叫解構函式,哪怕用 delete 顯式呼叫
    建構函式的異常可以丟擲,但是不要離開建構函式,需要內部處理,一般使用回滾機制
檔案IO
  操作檔案類
    ifstreamofstreamfstream
  open 開啟檔案
    in 讀
    out 寫
    app 在檔案末尾寫操作,在檔案開頭讀操作,檔案不存在則建立,存在不清空
    ate 開啟檔案時,指標在檔案末尾,讀寫操作都在末尾
    binary 以二進位制方式開啟檔案
    trunc 以清空方式開啟檔案
  read 二進位制方式讀檔案
  write 二進位制方式寫檔案
  seek 調整檔案指標的位置