《C++ primer plus》念書筆記(三)。本站提示廣大學習愛好者:(《C++ primer plus》念書筆記(三))文章只能為提供參考,不一定能成為您想要的結果。以下是《C++ primer plus》念書筆記(三)正文
第九章
1、C++法式的構成——
(1)、頭文件: 包括構造聲明和應用這些構造的原型。
(2)、源代碼文件: 包括與構造有關的函數的代碼。
(3)、源代碼文件: 包括挪用與構造有關的函數的代碼。
2、頭文件——
(1)、常包括的內容: 函數原型;#define或const界說的符號常量;構造聲明;類聲明;模板聲明;內聯函數。
(2)、若文件名包括在尖括號中,編譯器將在存儲尺度頭文件的主機體系的文件體系中查找。
(3)、若文件名包括在雙引號中,編譯器起首查找以後的任務目次或源代碼目次,再在尺度地位查找。
(4)、統一個文件中只能將統一個頭文件包括一次。用來疏忽除第一次包括以外的一切內容。
頭文件coordin.h中,常應用: #ifndef COORDIN_H_ define COORDIN_H_ /*頭文件內容*/ #endif
3、編譯進程——
(1)、敕令: CC file1.cpp file2.cpp
(2)、預處置器將包括的文件(頭文件之類的)和源代碼歸並。生成暫時文件temp1.cpp和temp2.cpp
(3)、編譯器創立每一個源代碼文件的目的代碼文件:file1.o和file2.o
(4)、鏈接法式將目的代碼文件、庫代碼和啟動代碼歸並,生成可履行文件:a.out
(留意!鏈接編譯模塊的時刻,請確保一切對象文件和庫都是統一個編譯器生成的。)
4、存儲連續性——主動存儲連續性、靜態存儲連續性、線程存儲連續性(C++11)、靜態存儲連續性。
5、棧——棧中的數據在相鄰的內存單位中
(1)、應用2個指針跟蹤棧,一個指向棧底(棧的開端地位),一個指向棧頂(下一個可用內存單位)
(2)、新值沒有被刪除,但不再被標志。
6、鏈接性——
(1)、內部鏈接性,可在其他文件中拜訪。如: 函數外,不應用staitic界說的變量
(2)、外部鏈接性,只能在以後文件中拜訪。如: 函數外,應用static界說的變量
(3)、無鏈接性,只能在以後函數或代碼塊中拜訪。如: 代碼塊中界說的變量
(留意!一切的靜態變量都邑起首被零初始化,然後再選擇靜態、靜態初始化。)
7、變量聲明——
單界說規矩 -> 變量只能有一次界說
(1)、界說聲明(界說):給變量分派存儲空間。
(2)、援用聲明(聲明):不分派空間,援用已有的變量。應用症結字extern,且不停止初始化。
(留意!要在多個文件中應用內部變量,應在一個文件中界說,其他文件中應用extern聲明。)
(應用extern可以籠罩變量默許的外部鏈接性,使其釀成內部的)
8、const char * const a[12] = { “a”,"b","c"... }; // 第一個const避免字符串被修正,第二個const確保數組中每一個指針指向它最後指向的字符串。
這個指針的類型是 char * [12],即char類型的指針的數組,數組年夜小為12。第一個const潤飾char *,第二個const潤飾a[12]。所以。
9、解釋符和限制符——
(1)、症結字thread_local: 指出變量的連續性和其所屬的連續性雷同。
(2)、const: 內存被初始化後,法式不克不及對它修正。const全局變量的鏈接性為外部的。
(3)、volatile: 每次都取值,不許可取值優化。
(4)、mutable: 即便構造(或類)變量為const,某個被mutable潤飾的成員也能夠被修正。
10、函數的鏈接性——一切函數的存儲連續性都主動為靜態的,鏈接性是內部的。可使用static在原型和界說中將鏈接性設置為外部的。
11、應用new初始化——
int a = new int(5); //設置a的值為5. 比擬之下,年夜括號初始化更便利和通用。
(new找不到要求的內存量、掉敗時,將激發異常std::bad_alloc)
(1)、運算符new現實上挪用void * operator new ( std::size_t );
(2)、運算符new[] 現實上挪用void * operator new[] ( std::size_t ); //這裡std::size_t現實上是一個體名typedef,對應適合的整型。
12、定位new運算符——
能指定要應用的內存地位。不跟蹤哪些內存單位未應用,也不查找未應用的內存塊。
(1)如:#include <new> char buffer[50]; struct1 * s = new (buffer) struct1; //從buffer平分配struct1年夜小的內存。
13、稱號空間——
相當於Java中的package,不外也有許多分歧。
(1)、稱號空間可所以全局的,也能夠位於另外一個稱號空間中。
(2)、默許情形下,稱號空間中聲明的稱號的鏈接性是內部的。
(3)、全局稱號空間,對應文件級聲明區域,全局變量位於此處。
(4)、稱號空間是開放的,便可以將某些稱號添加到已有的稱號空間中,如: namespace qsk { char * name(const char* ); } //將這個稱號添加到qsk中。
(5)、經由過程感化域運算符來限制各稱號,如: cout << qsk::name << endl;
14、using聲明和using編譯指令——
(1)、using聲明使得特定的標識符可用。(不必限制稱號,直接應用)如: using std::cout;
(2)、using編譯指令使得全部稱號空間可用。(多了一個namespace)如: using namespace std;
(留意,不要在頭文件中應用using編譯指令。關於using聲明,首選將其感化域設置為部分而不是全局。)
第十章
15、類——
(1)、類成員可所以數據也能夠是函數。類聲明時,用拜訪掌握符來潤飾。
(2)、界說成員函數時,應用感化域解析運算符(::)來表現函數所屬的類。如 void Stock::update(double price){}
(它可以拜訪類的公有成員)
(3)、界說位於類聲明中的函數,主動成為內聯函數。
(4)、也能夠在類外使函數成為內聯函數,只須要在類完成中應用 inline 限制符,如: inline void Stock::update(double price){}
(5)、創立對象,如: Stock a,b; 也能夠應用new為對象分派存儲空間。如: Stock a = new Stock;
(6)、經由過程成員運算符來應用成員函數,如: a.show();
(7)、所創立的每個對象都有本身的存儲空間,用於存儲其外部變量和類成員;一切對象公用一組類辦法。
16、拜訪掌握——private、public、protected
不用在類聲明中應用症結字private,它是類的默許拜訪掌握。
(留意!C++中,構造具有與類雷同的特征,不外構造的默許拜訪類型是public。)
17、類設計——
(1)、供給類聲明。
(2)、完成類成員函數。平日零丁供給函數界說,經由過程(::)來制訂函數屬於哪一個類。
18、類的結構函數——
專門用於結構新對象、將值付與它們的數據成員。
(1)、結構函數的原型和函數頭沒有前往值,並且沒有被聲明為void類型。結構函數沒有聲明類型。
(2)、結構函數的參數表現的不是類成員,而是付與他們的值,是以參數名不克不及與類成員雷同。(與Java分歧)
(罕見的做法是在數據成員名應用m_前綴,或應用後綴_)
19、應用結構函數——
(1)、隱式挪用: Stock s( "a", 22, 1.2); 或 Stock a;
(2)、顯式挪用: Stock s = Stock( "a", 22, 1.2);
(留意,結構函數的其他特點與Java相似。)
20、析構函數——對象過時時,法式主動挪用的成員函數,用以完成清算任務。如: ~Stock();
(留意!假如對象經由過程new創立的,應用delete釋放內存時,其析構函數被主動挪用。)
21、對象賦值——默許情形下,一個對象賦值給同類型的另外一對象時,會將源對象中每一個數據成員的內容復制給目的對象。
(1)、初始化方法: Stock s = Stock("a", 22, 1.2); //能夠創立暫時變量。
(2)、賦值方法: s1 = Stock("a", 22, 1.2); //總會在賦值前創立一個暫時變量。而且會主動為暫時變量挪用析構函數。
22、const成員函數——肯定不修正對象的類辦法。const症結字放在函數括號前面,如: void stock:: show() const;
23、C++11列表初始化——關於Stock jock {"abcd"}將婚配Stock::Stock(const std::string & co, long n = 0,double pr = 0.0);
而關於Stock c {};將婚配默許結構函數。
24、this指針——類辦法中應用,this指針指向挪用對象,為挪用類辦法的對象的地址。如需援用全部挪用對象,可使用*this。
25、對象數組——如: Stock s[4] = {Stock("a", 22, 1.2), Stock(), Stock("a", 22, 1.2)};
//這裡起首應用默許結構函數創立數組元素,然後花括號中的結構函數創立暫時對象,然後暫時對象的內容被復制到響應元素中
(留意!創立類對象數組,這個類必需有默許結構函數。)
26、感化域為類的常量——
(1)、類中聲明的列舉,感化域為全部類,不屬於對象,而是屬於類。
(2)、應用症結字static潤飾的常量將被放在靜態存儲區域,不屬於對象。
27、新列舉——enum class 或 enum struct
(1)、列舉量的感化域為類。須要用列舉名類限制列舉量。
(2)、慣例列舉主動轉換為整型,但感化域內列舉不克不及隱式轉換為整型。不外可以顯式轉換。
(3)、新列舉的底層類型為int,不外也能夠指定底層類型,如: enum class : short pizza { a, b, c, d};
28、小結——
(1)、類將數據和辦法組分解一個單位,其公有性完成數據隱蔽。類是用戶界說的類型,對象是類的實例。
(2)、類聲明應放在頭文件中,界說成員函數的源代碼應放在辦法文件中。
(3)、每一個對象都存儲本身的數據而同享類辦法。
(4)、籠統數據類型(Abstract Data Type)——ADT