程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 《C++ primer plus》念書筆記(三)

《C++ primer plus》念書筆記(三)

編輯:關於C++

《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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved