1. 程式人生 > >《面向物件程式設計——C++語言描述》學習筆記(二)

《面向物件程式設計——C++語言描述》學習筆記(二)

第二章 從C到C++

 2.1main函式

1.C++中需要寫int main()不能只是main()

2.main()函式裡面最後有一個return 0;

3.main()被啟動程式碼呼叫,而啟動程式碼是編譯器新增到程式中的,是程式和作業系統的橋樑。

4.C++中main()中的括號空著與void是等效的,都代表不接受引數,在C中是不等效的,括號中空著沒有引數代表對是否接受引數儲存沉默。

2.2 預處理和iostream檔案

1.#include <iostream>這句預處理在原始碼編譯之前把iostream檔案的內容新增到程式中,也就是把原始碼和iostream組合成一個複合檔案,然後再進行編譯。

2.include檔案也叫標頭檔案,因為一般包含再檔案的開頭位置。

2.3名字空間

1.可以消除因重名而導致的命名衝突。

2.域解析操作符

3.using宣告只對名字空間某一項起作用。

4.using namespace可以宣告全部項

2.4輸入輸出

1.cin代表標準輸入,cout代表標準輸出,cerr代表標準出錯,其中cout是帶緩衝的,cerr不帶緩衝,但兩者都是列印到螢幕。

2.cin會自動忽略空格,但是char也會忽略空格,以eof結束。

3.操縱符的使用,除了setw外,其他操縱符一旦使用將永久改變輸入輸出的狀態,直到下一個操縱符對其進行改變。

2.5檔案

1.

必須包含標頭檔案fstream,cin用ifstream代替,cout用ofstream代替。例如定義ifstream infile,可以使用file.open來開啟指定的檔案。

2.檔案使用結束後記得關閉檔案,file.close來關閉檔案。

3.可以測試檔案的開啟狀態if (infile)

2.6常見特性

1.強制型別轉換:static_cast,const_cast,dynamic_cast,reinterpret_cast

2.常數 const

3.資料型別bool:所有的關係操作符、相等操作符和邏輯操縱符都產生bool型別的結果值,而不是int型別。整數和指標表示式在需要的時候也可以產生bool型別的結果。比如cin << val; if (val){};操縱符boolalpha可以用來輸出ture或false,反之可用noboolalpha來輸出0或1。

4.列舉型別enum,主要用途是定義常量

5.定義變數:C++中可以在使用變數前進行宣告和定義。

6.結構:C++中可以不用struct,同時可以包含資料成員、函式的實體等。

2.7string型別

1.無需處理null結束符,由系統自動處理,與c語言不一樣。

2.轉換c語言風格的字串用函式c_str()

3.getline

4.可以使用+或+=來進行字串的拼接

5.修改字串使用erase,插入字串可以使用insert,替換字串用replace,調換兩個字串可以使用swap,提取子串用substr,查詢子串用find,字串比較用操作符即可,比如==,!=,>=,<=

2.8函式

1.函式原型:

  • C++中原型是必需的,沒有引數的函式可以為空的引數列表,不用指明關鍵字void,而且返回型別必須指定。

2.引用:

  • 用&來標記,用來提供儲存器的別名;
  • 除了不需要進行提取操作外,引用操作符和指標類似;
  • 引用呼叫可以將實際實參傳遞給函式;
  • 引用返回可以實現返回值不需要拷貝到臨時儲存空間,呼叫者可以直接訪問返回值,同時這樣的函式呼叫可以用在賦值語句左邊,因為這樣的方式返回的是實際單元.

3.行內函數:

  • Inline出現在函式宣告而不是函式定義的部分
  • 編譯器會將內聯的函式的那部分實現程式碼直接替換主函式中呼叫的函式
  • 行內函數跟巨集有點類似,但是不完全一樣,巨集只是簡單的文字替換,行內函數是需要編譯器考慮語義。

4.函式預設引數

  • C++中允許呼叫函式時不提供引數的情況下采用預設值,這個預設值在函式宣告中有賦初值。
  • 函式宣告中沒有預設值的引數放在前面,有預設值的引數放在後面,不然會出錯。

5.函式過載

  • 通常用來針對有相似行為而資料型別不同的操作提供一個通用的名稱,這樣使用者就不需要考慮具體的函式引數的資料型別,直接使用即可,類似printf函式。
  • 函式名可以一樣,但是引數個數和型別需要有所區別,具體的匹配過程不需要考慮。

6.函式簽名

  • C++要求過載的函式需要具有不同的簽名,每個函式必須用於獨一無二的簽名
  • 不同的函式簽名體現在函式名不同、函式名相同但引數個數、順序、資料型別不同
  • 函式的返回值型別不能用來區分不同的函式簽名

2.9new和delete操作符

1.C++裡面的new和delete跟C語言的malloc和free類似,但是C++中的new和delete不是庫函式而是內建的操作符,並且是關鍵字。

2.int_ptr =new int; delelte int_ptr;或者int_ptr = new int[50]; delete[] int_ptr

3.不用把new和delete與malloc和free函式混合使用。

2.10例外處理

1.例外是由執行時錯誤導致的異常情況,比如索引越界或者new請求失敗等。

2.丟擲例外是在例外發生後,然後可以通過catch這個例外捕捉器來進行處理。

3.例外和不同捕捉器之間的匹配是通過型別判定來進行的。

4.catch程式塊可以包含一個引數或者因為特定型別的例外而直接輸入catch程式塊中。

5.try程式塊、catch程式塊、trow機制。

2.11補充材料

1.無名名字空間:類似C語言中的static,可以使得一個頂層函式不能再定義該函式的檔案外訪問。只有與無名名字空間裡面的函式在同一個檔案才可以呼叫。

2.無名聯合

3.成員選擇符:—>,*