程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
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、預處置器——#include<iostream>將iostream文件內容添加到法式中。老式C頭文件保存了擴大名.h,而C++頭文件沒有擴大名。

(有些C頭文件被轉換為C++頭文件,去失落擴大名,並在後面加c,如cmath)

2、稱號空間——相當於Java中的package,using編譯指令相當於Java中的import。頭文件沒有.h前綴時,類、函數和變量是C++編譯器的尺度組件,被放置在稱號空間std中。

3、類的實質——類是用戶界說的一種數據類型。類界說描寫的是數據格局及其用法,而對象則是依據數據格局標准創立的實體。

4、main()——main()的前往值(加入值)是前往給操作體系。平日加入值為0意味著法式運轉勝利。

第二章

5、OOP——面向對象編程的實質是設計並擴大本身的數據類型,讓類型和數據婚配。

6、標識符——以一個下劃線開首的稱號被保存給完成,作全局標識符;以兩個下劃線或下劃線加年夜寫字母的稱號被保存給完成(編譯器及其應用的資本)應用。

(C++對稱號長度沒無限制)

7、整型——short至多16位;int至多和short一樣;long至多32位,且至多和int一樣長;long long至多64位,且至多和long一樣長。

8、字節——字節平日指8位的內存單位,而C++中的字節依附於完成。

9、運算符——運算符是內置的說話元素。sizeof運算符前往類型或變量的長度(字節)。所以,分歧體系中sizeof( int )的前往值能夠分歧。

10、頭文件climits——界說了各類表現類型限制的符號常量。如:#define INT_MAX 32767。(被設計為C可用的頭文件,符號常量必需用#define編譯指令界說)

11、變量初始化——

  函數外部界說的變量,應當在界說的時刻停止初始化,不然它的值是不肯定的,為被創立前響應的內存單位保留的值。

  (1)、int a = 1;  //  傳統的C初始化

  (2)、int b(2);  //  C++的新方法

  (3)、int c = {3} 或 int c{3}  //  C++的年夜括號初始化器用於任何類型(年夜括號內不包括任何器械時,變量的初始化為0)

12、int——盤算機處置起來效力最高的長度。除非應用後綴或值太年夜,C++平日將整形常量存儲為int類型。

13、wcha_t——是整形類型,有足夠的空間表現體系應用的最年夜擴大字符集。應用 iostream 中的 wcin 和 wcout 處置wcha_t流。

  可以經由過程前綴L來指導寬字符常量和寬字符串,如 wcha_t a = L'p';  wcout << L"tall" << endl;

  (C++11新增類型 char16_t 和 char32_t ,都是無符號的,分離長16位和32位,應用前綴 u 表現前者,前綴 U 表現後者)

14、bool——C++將0說明為 false ,將非零說明為 true 。

15、const——創立常量時最好立時賦值,如cont int a = 5;常量平日將首字母年夜寫。

16、浮點——float至多32位;double至多48位,且很多於float;long double 至多和double一樣多。這三品種型的指數規模至多是-37-37。

  (1)、cout.setf()可以掌握輸入格局,迫使cout應用定點表現法。由於cout平日會刪除浮點前面的0,如3.3300000顯示為3.33。

  (2)、浮點常量平日為double類型,平日用後綴f或F指定float類型,用後綴l或L指定long double類型。

17、強迫類型轉換——

  如:(long) thorn  或  long(thorn)

  強迫類型轉換不會修正thorn自己,而是創立一個新的、指定類型的值。

  也能夠如許:  static_cast<long> (thorn)  ,它比傳統的強迫類型轉換更加嚴厲。

18、auto——主動揣摸類型,症結字auto可以不指定變量的類型,編譯器主動把變量的類型設置成與初始值雷同,如 auto a = 100;

  不外,auto普通是用於處置龐雜類型

第四章

19、數組——

  (1)、聲明數組的通用格局:  typeName arrayName[arraySize]  ,如 int a[5];

  (編譯器不會檢討應用的下標能否有用。)

  (2)、假如沒有初始化函數中界說的數組,其元素的值為之前駐留在該內存中的值。(與函數中的變量一樣)

  (3)、sizeof 感化與數組名時,獲得的是全部數組中的字節數。感化於元素時,獲得的是該元素的字節數。

  (4)、只要界說數組時能力初始化,以後就不可了。可以部門初始化,如:int a[5] = {1,2},部門初始化時,編譯器把其他元素設置為0。

  可以如許:  int b[] = {1,2,3,4,5};  讓編譯器盤算元素個數。

  (5)、應用列表初始化數組時,可以省略等號(=);年夜括號內不包括任何內容時,默許一切元素為0;列表初始化制止縮窄轉換。

20、字符串——

  字符串是存儲在內存的持續字節中的一系列字符。

  (1)、C-作風的字符串以空字符開頭,其ASCII碼為0,如:  char dog[7] = {'a','b','c','d','e','f','\0'};  留意,數組長度必需盤算‘\0'  

  (2)、字符串常量,如:  char cat[] = "cat";

  (留意!'S'代表字符常量,而"S"表現‘S'和‘\0'兩個字符構成的字符串,“S”現實表現的是字符串地點的內存地址)

  (3)、拼接字符串時,第一個字符串最初的‘\0'會被第二個字符串的第一個字符代替。

  (4)、strlen()函數前往存儲在數組中的字符串的長度,只包含可見的字符,不包含空字符。  

  (5)、cin應用空白(空格、制表符和換行符)來肯定字符串的停止地位,所以它讀取數組輸出時,只讀取第一個單詞,並主動添加空字符。

  (6)、面向行的輸出有getline()和get(),它們都經由過程換行符來肯定輸出開頭,分歧的是,get()其實不再讀取並拋棄換行符。

  cin.getline(name,ArSize),將讀取ArSize-1個字符到name數組中。關於get(),可以如許應用:  cin.get(name,ArSize).get();

  (7)、讀取空行時,get()將設置掉效位;假如輸出行包括的字符數比指定的多,getline()會設置掉效位。前面的輸出將被阻斷。

  (8)、許可:char c[] = {"hello world!"};

  (9)、string類具有主動調劑年夜小的功效,是以更加平安。

  (10)、strcpy(str1,str2)將str2復制給str1,  strcat(str1,str2)將str2附加到str1的開頭。

  (11)、str1.size()和strlen(str1)的功效雷同。前者是string類的一個辦法,後者是一個慣例函數。

21、原始(raw)字符串——原始字符串中,\n不表現換行符,如:    默許定界符 ( 和 )  cout << R"(don't use "\n" ,OK?)" << '\n'; 輸入:don't use "\n" ,OK?

  自界說定界符 +*( 和 )+*  cout << R"+*("(don't use "\n" ,OK?)")+*" << '\n'; 輸入:"(don't use "\n" ,OK)"

22、構造——

  (1)、界說:  struct  man { char name[20];  double weight;  int age; };

  (2)、聲明,許可省略症結字struct,如:  man mike;

  (3)、初始化:  man mike {"mike", 56.2, 22};

  (4)、應用成員運算符(.)來拜訪各個成員。

  (5)、同時界說構造和創立變量:  struct  man { char name[20];  double weight;  int age; } mike = {"mike", 56.2, 22}, jim ;

  (6)、還可以聲明匿名構造:  struct { int x, int y } point ;

23、構造中的位字段——指定占用特定位數的構造成員,如:  struct my_bit { unsigned int x : 4;  bool  y : 1; };

24、內部聲明——函數內部的聲明。C++不倡導應用內部變量,倡導應用內部聲明。

25、共用體——

  一種數據格局,可以或許存儲分歧的數據類型,但只能同時存儲個中的一品種型,經常使用於節儉內存。如:  union id { long long_id ;  char char_id; };

  (1)、因為共用體每次只能存儲一個值,其長度為最年夜成員的長度。

  (2)、匿名共用體沒著名稱,其成員將成為位於雷同地址處的變量,每次只要一個成員是以後成員。

26、列舉——

  另外一種創立符號常量的方法,可以取代const。如:  enum spectrum { a , b , c , d , f };

  (1)、默許情形下,a、b、c、d 、f 作為符號常量,對應0到4。

  (2)、關於列舉,只界說了賦值運算符,並沒有界說算術運算。

  (3)、只能將界說列舉時應用的列舉量賦給列舉變量。

  (4)、可使用賦值運算符顯式設置列舉量的值。如:  enum bits { first , zero = 0 , two = 200 ,three , four };  //這裡three的值為201, first 的值為0

  (5)、列舉的取值規模。bits的最年夜值是202,年夜於它的最小的2的冪為256,所以bits的取值規模為0—255  

  (6)、經由過程強迫類型轉換,增長了可賦值給列舉變量的正當值,只需在取值規模內。如:  bits b = bits(240);

27、指針——

  指針是一個變量,存儲的是值的地址,而不是值自己。

  (1)、地址運算符(&)可以取得變量的地位(存儲地址)。

  (2)、指針,將地址看做指定的量,將值看做派生量。指針名表現地址。

  (3)、*運算符被稱為直接值(消除援用)運算符。用於指針可以獲得指針地址存儲的值。

  (4)、聲明:  int * a;  // *運算符雙方的空格是可選的  int * b , c;  // 創立指針b和int變量c,每個指針都須要一個*

  (5)、初始化:  int * a = &b;  // 將指針a的值設為&b

  (6)、必定要在對指針應用消除援用運算符(*)之前,將指針初始化為一個肯定的、恰當的地址。  

  (7)、將數字賦值給地址:  int * pt = (int * ) 0x8000000;

  (8)、分派內存:  int *pn = new int;  //從堆(heap)或只要存儲區(free store)的內存區域分派內存。

28、數組——

  (1)、編譯時給數組分派內存被稱為靜態聯編,法式運轉時選擇數組長度被稱為靜態聯編。

  (2)、創立靜態數組:  int * p = new int [10]; // p為該元素第一個元素的地址

  (3)、釋放數組:  delete [] p;  // 只能釋放new分派的內存;  不克不及delete兩次;  對空指針delete平安;  數組用delete [] 釋放。

  (4)、不克不及應用sizeof運算符來肯定靜態分派的數組包括的字節數。

  (5)、應用數組:  p[0]為第一個元素,p[1]是第二個。  // C++外部應用指針來處置數組,p[1]被看做 *(p+1)

  (6)、p = p + 1;  // 指針變量加1後,增長的量為它指向的類型的字節數。

  (7)、多半情形下C++將數組名說明為數組第一個元素的地址。

  (8)、指針和數組名的差別:  可以修正指針的值,而數組名是常量;  對數組名應用sizeof獲得數組的字節數,而對指針應用sizeof獲得指針的長度。

  (9)、short tell[10];  cout << tell;  // 數組名自己為其第一個元素的地址,如:&tell[0] ,即一個2字節內存塊的地址。

    cout << &tell;  // 輸入的是一個20字節內存塊的地址。

  (10)、給cout供給一個字符的地址,它將從該字符開端打印,直到碰到空字符為止。

  (11)、要打印一個指針的地址,必需把這個指針強轉成另外一種指針類型,如 (int *) p;

29、應用new創立靜態構造——struct1 * s = new struct1;  // 此時,構造標識符是指針,所以不克不及應用成員運算符句點(.),

    // 只能應用箭頭成員運算符(->)拜訪成員或許應用(*s).price 來拜訪成員。

30、主動存儲、靜態存儲和靜態存儲——

  (1)、函數外部界說的慣例變量為主動變量,存儲在棧中,落後先出(LIFO),法式履行中,赓續增年夜減少。為主動存儲。

  (2)、在函數裡面界說,或聲明變量應用static症結字的變量為靜態變量。靜態存儲是全部法式履行期都存在的變量。

  (3)、應用new創立的變量為靜態存儲。new和delete治理類一個內存池,被稱為free store 或 heap。

  (留意!棧中主動添加和刪除機制使得占用的內存老是持續的,而new和delete能夠招致只要存儲區不持續)

31、模板類vector——相似string,也是一種靜態數組,是應用new創立靜態數組的替換品,主動應用new和delete治理內存。

    #include<vector>  using namespace std;  // 包括頭文件,vector位於std稱號空間中

    vector<int> ele(10);  // 創立一個名為ele的vector對象,可存儲10個類型為int的元素。

  (留意,C++11中可用列表初始化。類型可所以變量)

32、模板類array——與數組一樣,長度固定,應用棧存儲,效力與數組雷同,而更便利、平安。

    #include <array>   using namespace std;  array<int,5> arr;  // 名為 arr 的array對象,包括5個int元素。

  (留意,類型不克不及是變量!可用列表初始化)

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