c 基礎 筆記(九)

2021-08-09 07:16:31 字數 3971 閱讀 1076

1 型別轉換

1.1 靜態型別轉換  static_cast

1.1.1 父子類之間的指標或者引用可以轉換

1.1.2 基礎資料型別也可以轉換

1.1.3 無父子關係的類之間不可以轉換

1.2 動態型別轉換 dynamic_cast

1.2.1 父子類之間的指標或者引用的轉換

1.2.2 基礎資料型別

不可以轉換

1.2.3 父轉子

不安全不可以轉換

1.2.4 子轉父

安全可以轉

1.2.5 如果發生多型

總是安全的

可以轉換

1.3 常量轉換 const_cast

1.3.1 加const或者移除

const

1.3.2 只能對指標或者引用之間

做轉換操作

1.4 重新解釋轉換

reinterpret_cast

1.4.1 最不安全

不建議使用

2 異常的基本語法

2.1 try 嘗試 執行

try裡面的**塊

2.2 如果丟擲異常

可以利用 catch捕獲異常

2.3 丟擲異常關鍵字 throw  型別

2.4 catch(型別)

2.5 捕獲其他型別  catch(…)

2.6 異常如果捕獲到了

,不處理

繼續向上丟擲

,throw

2.7 如果異常沒有任何處理,程式會跳躍terminate函式,使程式中斷掉

2.8 可以建立自己的異常型別,進行捕獲

3 棧解旋

3.1 從try**開始後,到

throw

丟擲異常前,棧上的內容都會被釋放掉,這個過程就稱為棧解旋

4 異常的介面宣告

4.1 qt或者

linux

下可以做測試

vs下沒有這個機制

4.2 void func() throw(int) 只許丟擲

int型別異常

4.3 任何型別異常都不丟擲  throw()

5 異常變數生命週期

5.1 三種方式建立

5.1.1 catch (myexception e)  多乙份開銷,呼叫拷貝構造

5.1.2 catch (myexception &e) 提高效率,節省乙份開銷

推薦使用

5.1.3 catch (myexception *e) 

5.1.3.1 throw &myexception() 提前釋放掉物件,導致結果不正常

5.1.3.2 throw new myexception() 邏輯正常,但是要自己去管理釋放

6 異常多型使用

6.1 利用baseexception寫了乙個抽象類

6.1.1 抽象類中寫了乙個printerror方法

6.2 派生類

6.2.1 空指標異常類

6.2.2 越界異常類

6.2.3 必須重新實現 printerror方法

6.3 丟擲異常 throw 空指標異常  或者 丟擲 越界異常

6.4 捕獲異常 baseexception &e

6.4.1 列印資訊 e.printerror();

6.5 系統內部處理也是利用多型去做的處理

7 使用系統標準異常

7.1 標頭檔案  stdexcept

7.2 throw out_of_range(

char *)

7.3 catch(

out_of_range & e)

7.4 e.what() 返回

char*

8 編寫自己的異常類

8.1 重寫exception中  析構 ,

what方法

8.2 內部維護 string   errorinfo 維護錯誤的資訊

8.3 建立myoutofrangeexception類,丟擲自己的異常物件

8.4 捕獲時候

可以列印內部的what返回的字串

8.5 重寫 const char * what() const

9 標準的輸入流

9.1 cin.get()

9.1.1 獲取乙個字元

9.2 cin.get(buf,

1024)

獲取字串

9.2.1 將換行符留在緩衝區中

9.3 cin.getline()

9.3.1 將換行符

拿走,並且拋棄掉,不留在緩衝區中

9.4 cin.ignore

9.4.1 忽略

9.4.2 預設忽略1個字元

9.4.3 cin.ignore(n) 忽略

n個字元

9.5 cin.peek() **

9.5.1 可以**乙個字元,並不會從緩衝區中拿走字元

9.6 cin.putback

9.6.1 放回

,將拿走的字元放回到緩衝區中

9.7 輸入流的案例

9.7.1 判斷使用者輸入的是數字還是字串

9.7.1.1 利用cin.peek 或者

cin.putback

9.7.2 讓使用者輸入0~10的數字,如果輸入有誤,重新輸入,直到輸入正確為止

9.7.3 cin.fail 標誌位  

0  正常

1 異常

9.7.4 cin.clear() 重置標誌位

9.7.5 cin.sync() 清空緩衝區

10 標準的輸出流

10.1 cout.put(『a』).put(『b』)

10.2 cout.write() 輸出字串

10.3 流物件的成員函式

10.3.1  int number = 99;

10.3.2  cout.width(20); // 預留位置

10.3.3  cout.fill('*'); //填充符號

10.3.4  cout.setf(ios::left); //設定格式 為左對齊

10.3.5  cout.unsetf(ios::dec); //解除安裝十進位制

10.3.6  cout.setf(ios::hex);  //安裝十六進製制

10.3.7  cout.setf(ios::showbase); //顯示基數

10.3.8  cout.unsetf(ios::hex);  //解除安裝十六進製制

10.3.9  cout.setf(ios::oct);  //安裝八進位制

10.3.10 cout << number << endl;

10.4 控制符方式

標頭檔案 iomanip

10.4.1  cout << setw(20)

10.4.2   << setfill('~')  //設定填充

10.4.3   << setiosflags(ios::showbase)  //設定基數

10.4.4  << setiosflags(ios::left) //左對齊

10.4.5  << hex  //安裝

16進製制

10.4.6  << number

10.4.7  << endl;

11 檔案的讀寫操作

11.1 寫

11.1.1  標頭檔案  fstream

11.1.2 物件 ofstream ofs

11.1.3 ofstream.open( 檔案路徑, 開啟模式)

11.1.4 is_open 判斷是否開啟成功

11.1.5  ofs << 「內容」

11.1.6 ofs.close()  關閉流物件

11.2 讀

11.2.1 物件  ifstream ifs

11.2.2 open(檔案路徑,開啟模式)

11.2.3 is_open 判斷是否開啟成功

11.2.4 三種方式都可以讀取內容

11.2.5  ifs.close() 關閉流物件

12 

C語言基礎九

在宣告全域性變數的時候前面加關鍵字extern可以讓當前原始檔使用其他原始檔中宣告的全域性變數 使用static關鍵字宣告的全域性變數叫做靜態全域性變數,它的作用域被限制在宣告它的那個原始檔內部。static也可以用來宣告函式,效果和靜態全域性變數一樣 makefile用來完成程式編譯過程的管理,m...

C 學習筆記 九

第9講事件1 現在來講一下事件。我們知道windows作業系統是乙個基於事件的作業系統。掌握事件的機制對gui程式設計能有著非常重要的意義。事件是類在發生其關注的事情時來提供通知的一種方式。例如,封裝使用者介面控制項的類可以定義乙個在使用者單擊該控制項時發生的事件。控制項類不關心單擊按鈕時發生了什麼...

c 學習筆記九

程式檔案和預處理指令 1 程式檔案 標頭檔案 型別定義和其他用於程式中乙個或多個原始檔的 字尾名為 h 原始檔 要編譯成機器指令的 字尾名為 cpp c cxx 引入標頭檔案 格式如下 include 名稱的作用域 程式檔案的連鏈結 確定名稱的鏈結屬性 內部鏈結屬性 可以在同乙個轉換單元的任何地方訪...