《C++ primer plus》念書筆記(二)。本站提示廣大學習愛好者:(《C++ primer plus》念書筆記(二))文章只能為提供參考,不一定能成為您想要的結果。以下是《C++ primer plus》念書筆記(二)正文
第五章
1、for輪回——for(initialization; test-expression; update-expression) body // test-expression 會被轉換為bool,0為false,非零為true
2、表達式——表達式是值或值與運算符的組合。賦值表達式的值為其左邊成員的值,而賦值運算符是從右到左聯合的。
3、a++和++a——
(1)關於內置類型,兩種履行效力雷同。
(2)若重載運算符,關於類而言,前綴將值加1,前往成果;後綴會復制一個正本,加1後前往正本。所之前綴比後綴效力高。
4、逗號運算符——
(1)for輪回中,將多個表達式歸並為一個: i++, j++;
(2)聲明: int i , j;
(3)逗號表達式先盤算第一個表達式,再盤算第二個表達式。逗號表達式的值是第二部門的值。
(4)逗號表達式是優先級最低的表達式。
5、strcmp()——比擬兩個字符串。接收2個字符串地址A、B作為參數。AB雷同前往0,A的字母次序在B之前,者前往正數,不然前往負數。
(用引號括起的字符串常量是其地址。)
6、clock()——前往法式開端履行後所用的體系時光。這個值除以CLOCKS_PER_SEC可以獲得秒數。
7、類型別號——#define AA char // 用AA作為char的別號,一切的AA將被char替換
或 typedef AA char
8、cin——cin.get()會疏忽空格和換行符。發送給cin的輸出會被緩沖。按下回車鍵,輸出的內容才會被發送給法式。
cin.get(ch)會獲得每一個字符。其參數聲明為援用類型,所以函數可以修正其參數的值。
9、EOF——許多PC編程情況都將Ctrl+Z視為模仿的EOF,檢測到EOF以後,cin將兩位(eofbit和failbit)都設置為1。eof()和fail()用來檢查能否被設置。
所以輪回期待輸出的前提可以如許設置:while( cin.fail() == false ) {} 或 whle( !cin.fail() ){} 或 while(cin){} 或 while( cin.get(ch) ){}
(平日,EOF被界說為-1)
第六章
10、運算符——!運算符的優先級高於一切的關系運算符和算術運算符。
邏輯AND運算符的優先級高於邏輯OR運算符。
C++確保法式從左到右盤算邏輯表達式。
11、cctype——字符函數庫。如isalpha(ch)斷定字符是否是字母,是字母就前往非零,不然前往0。
12、文本IO——應用cin停止輸出時,法式將輸出看做一系列的字節,個中每一個字節被說明為字符編碼。
第七章
13、界說函數——
(1)、無前往值: void functionName(parameterList) {}
(2)、有前往值: typeName functionName(parameterList) {}
(留意!前往值的類型不克不及是數組,可所以其他任何類型)
14、函數原型——
(1)、函數原型能極年夜下降法式失足的概率、進步效力。
(2)、函數原型不請求供給變量名,有類型列表就足夠了。
(3)、括號為空與括號中應用void是等效的,不指定參數列表應應用省略號——void haha(...);
15、函數和二維數組——指針的類型是指把指針聲明語句中的指針名字去失落所剩下的部門
關於: int data[3][4] = {{1,2,3,4},{5,6,7,8},{4,3,2,1}}; int total = sum(data,3); sum的原型是甚麼?
(1)、原型是: int sum ( int (*a) [4] , int size);
所以 int(*)[4]即,將這個指針指向int[4]。所以data的類型指向由4個int構成的數組的指針
所以 int *a[4] 的類型是int * [4],這個指針指向int,總共有4個,即它是4個指向int指針構成的數組。
(2)、函數界說: int sum (int a[][4] ,int size);
a[ r ][ c ] = *( *( a + r ) + c);
16、遞歸——每一個遞歸挪用都創立本身的一套變量。
(留意!C++不許可main()挪用本身。)
17、函數指針——
(1)、函數地址: 函數的地址是存儲其機械說話代碼的內存的開端地址。假如think()是一個函數,那末think就是它的地址。
(2)、聲明指針函數: 函數:double pam(int); 指針函數為: double (*pf)(int) = pam; // pf是一個指向函數的指針。
第八章
18、編譯進程——編譯進程的終究產物是可履行法式(由一組機械說話指令構成)。
運轉法式時,操作體系將這些指令載入到盤算機內存中,是以每條指令都有特定的內存地址。盤算機隨後慢慢履行這些指令。
19、函數挪用——履行到函數挪用指令時,法式將在函數挪用後,立刻存儲該指令的內存地址,並將函數參數復制到客棧,跳到標志函數終點的內存單位,
履行函數代碼(或許還需將前往值放入存放器),然後跳回到地址被保留的指令處。
20、內聯函數——編譯器應用響應的函數代碼取代函數挪用。
函數聲明前加上症結字inline,函數界說前加上症結字inline。平日將省略原型,原型處直接界說。
21、援用變量——重要用處是作函數的參數,函數將應用原始數據,而不是其正本。
(1)、創立: int rats ; int & a = rats;
(2)、援用必需在聲明時初始化,不克不及先聲明再初始化。也不克不及經由過程賦值來設置援用。
(3)、援用一旦與某個變量聯系關系起來,就一向盡忠。
(4)、若援用參數是const,若實參類型准確卻不是左值 或 類型不准確卻可以轉換成准確類型 時,將創立暫時變量。
(5)、前往援用時,應防止前往函數終止時不再存在的內存單位援用。
22、左值——
(1)、可被援用的數據對象。如變量、數組元素、構造成員、援用息爭除援用的指針等。
(2)、非左值,包含字面常量和包括多項的表達式。
(3)、慣例變量屬於可修正的左值,const變量屬於弗成修正的左值。
23、右值援用——可指向右值的援用,應用&&聲明。如: double & rref = std::sqrt ( 26.00 ) ;
24、默許參數——經由過程函數原型設置函數參數默許值。
(1)、必需從右到左添加默許值。
(2)、實參依照從左到右的次序順次被賦值給形參,而不克不及跳過任何參數。
25、函數重載——參數列表(特點標)分歧,而函數名雷同的函數。
(1)、類型援用和類型自己被視為統一個特點標。
(2)、不克不及把const變量賦值給非const形參
26、稱號潤飾——依據函數原型中指定的形參類型對每一個函數名停止加密,用來跟蹤每個重載函數。
27、函數模板——相當於Java中的泛型
(1)、聲明: template <typename T> void Swap(T &a, T &b); // typeName 可用 class 調換
(2)、函數模板不克不及延長可履行法式,終究的代碼不包括任何模板,只包括了為法式生成的現實函數。
(3)、普通將模板放在頭文件中。
28、顯式詳細化——詳細化的函數界說,婚配時,應用它而不是模板。
(1)、非模板函數: void swap( job &, job &);
(2)、模板函數: template <typeName T> void swap( T & ,T &);
(3)、顯式詳細化: template<> void swap<job>( job &, job &); // swap<job>中job是可選的
(4)、編譯器在選擇原型時: 非模板函數 > 顯式詳細化 > 模板函數
(5)、顯式實例化: template void swap<int> ( int, int); // template後無<>
(6)、隱式實例化: 關於模板函數,編譯器會經由過程對這個模板含數的援用生成一個含數的實例,這平日叫隱式實例化
29、decltype——decltype( expression ) var; // 讓var的類型與expression一樣。
(留意!若expression是一個函數挪用,var的類型與其前往值雷同。若expression是一個左值,var為指向其類型的援用)
30、後置前往類型——給函數指定前往類型。
如:template<class T1, class T2> auto gt( T1 x, T2 y) -> decltype( x + y ) { ... return x + y ;}