一、異常處理
1、什么是異常:能遇見但無法避免的錯誤
2、如何拋出異常
throw 數據;
a、可以拋出基本類型的異常
throw -1;
throw "我是異常";
b、可以拋出類類型的異常
throw Student stu;
c、不要拋局部對象的指針的異常
Student stu;
throw &stu;
3、如何捕獲異常
try
{
//可能會產生異常的代碼
}
catch(異常類型1)
{
//異常處理代碼1
}
catch(異常類型2)
{
//異常處理代碼2
}
catch(異常類型3)
{
//異常處理代碼3
}
a、在捕獲異常時不光能獲得異常,還能獲得拋出的異常數據
b、如果異常拋出了,但沒有被捕獲程序會結束
c、異常的捕獲是自上而下的,不是選擇最優,因此子類的異常捕獲最好放在父類前面
d、捕獲異常時盡量使用引用的方式,由於在拋出異常時如果使用對象的方式來捕獲就會調用對象的拷貝構造,這樣會在拷貝對象過程中再次引用引發異常
4、類類型的異常
a、可以為每一種異常定義一個什么都不用做的類,它只是為了區分各種異常
b、在拋出異常時可能會調用異常的構造、拷貝構造、賦值構造等,如果在類中有看不到的資源時,一定要把這三個函數實現
c、為了防止有自定義的異常無法被捕獲,因此我們在定義異常時,最好都繼承標准庫中的異常類,這樣哪怕,不能精准的捕獲到異常,也能不遺漏異常
d、在拋出異常時,盡量拋匿名臨時對象
5、編譯器會生成一段用來申請"安全區"的代碼並保護它,在異常發生后,此時程序的節奏已經被打斷,沒有任何位置是安全的除了安全區以外,安全區能保證存儲在此位置的異常對象不受破壞
6、構造和析構函數中的異常
在構造函數中發生了異常后,會直接跳轉到異常處理代碼,異常的構造就此中斷,對象的構造就不完整了,不完整的對象永遠不可能調用析構函數,哪怕用delete[]顯示調用
在構造函數的異常可以拋,但是不要拋出構造函數(內部處理),一般使用回滾機制
二、文件IO
操作文件的類:ifstream、ofstream、fstream
open打開文件
打開文件的方式
in 讀 ifstream/fstream
out 寫 ofstream/fstream
app 以追加的方式打開,文件不存在則不創建,存在不清空
ate 打開文件時定位在文件末尾
binary 以二進制方式打開文件
trunc 以清空方式打開文件
in|out
文本方式的讀寫使用<<,>>,與cout、cin類似
read二進制方式讀文件
write二進制方式寫文件
seek調整文件的位置指針
