《面向對象程序設計——C++語言描述》學習筆記(二)

第二章 從C到C++

 2.1main函數

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

2.main()函數裏面最後有一個return 0;函數

3.main()被啓動代碼調用,而啓動代碼是編譯器添加到程序中的,是程序和操做系統的橋樑。測試

4.C++中main()中的括號空着與void是等效的,都表明不接受參數,在C中是不等效的,括號中空着沒有參數表明對是否接受參數保存沉默。spa

2.2 預處理和iostream文件

1.#include <iostream>這句預處理在源代碼編譯以前把iostream文件的內容添加到程序中,也就是把源代碼和iostream組合成一個複合文件,而後再進行編譯。操作系統

2.include文件也叫頭文件,由於通常包含再文件的開頭位置。指針

2.3名字空間

1.能夠消除因重名而致使的命名衝突。索引

2.域解析操做符ci

3.using聲明只對名字空間某一項起做用。字符串

4.using namespace能夠聲明所有項get

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.成員選擇符:—>,*

相關文章
相關標籤/搜索