C/C++重點知識點

PART 1

16/32/64位機器上 char佔用1個字節、short、short int佔用2個字節、float佔用4個字節、double、long long佔用8個字節

int、unsigned int在16位機器上佔用2個字節,在32/64位機器上佔用4個字節

指針在16位平臺佔用2個字節,在在32位機器上佔用4個字節,在64位機器上佔用8個字節

long、unsigned long在16/32位機器上佔用4個字節,在64位機器上佔用8個字節。

綜上所述,如果不考慮很少使用的16位機器的情況。char(1)、short/short int(2)、float/int/unsigned int(4)、double/long long(8)在32位和64位機器上佔用的空間是一樣的。只有long/unsigned long/指針(4、8)有差別。

具體如圖所示:

 

32bit 平臺

64bit 平臺

char

1

1

short

2

2

int

4

4

long

4

8

long long

8

8

float

4

4

double

8

8

pointer

4

8

PART 2

C++ 是區分大小寫的編程語言。

C++之所以增加引用類型, 主要是把它作爲函數參數,以擴充函數傳遞數據的功能。
引用變量是一個別名,也就是說,它是某個已存在變量的另一個名字。引用很容易與指針混淆,它們之間有三個主要的不同:
1、不存在空引用。引用必須連接到一塊合法的內存。
2、一旦引用被初始化爲一個對象,就不能被指向到另一個對象。指針可以在任何時候指向到另一個對象。
3、引用必須在創建時被初始化。指針可以在任何時間被初始化。

實際操作中,我們一般會在私有區域定義數據,在公有區域定義相關的函數,以便在類的外部也可以調用這些函數。這個方式確實好,有點裏應外合的感覺。
C++中,單冒號用於繼承和初始化的賦值,雙冒號用於類之外函數的定義以及直接使用類調用靜態類成員函數。
如果在類中沒有定義拷貝構造函數,編譯器會自行定義一個。如果類帶有指針變量,並有動態內存分配,則它必須有一個拷貝構造函數。

malloc() 函數在 C 語言中就出現了,在 C++ 中建議儘量不要使用 malloc() 函數。new 與 malloc() 函數相比,其主要的優點是,new 不只是分配了內存,它還創建了對象。

重載是指允許存在多個同名方法,而這些方法的參數不同。重載的實現是:編譯器根據方法不同的參數表,對同名方法的名稱做修飾。對於編譯器而言,這些同名方法就成了不同的方法。它們的調用地址在編譯期就綁定了。多態是指子類重新定義父類的虛方法(virtual,abstract)。當子類重新定義了父類的虛方法後,父類根據它的不同子類,動態調用屬於子類的該方法,這樣的方法調用在編譯期間是無法確定的。重載發生在一個類中,指函數的方法名相同,參數類型或個數不同,重寫發生在繼承類中,指函數的方法名、參數類型、返回值類型全都相同。
只有子類轉換成父類,父類不可能轉換成子類。因爲子類是從父類繼承而來,子類中包含父類中所有成員。在子類轉換成父類的時候,也需要注意,只能是指針或者引用,不能是對象,除非有重寫構造函數和賦值函數。在轉換成父類的過程中,意味着對子類進行了一個切割,只是將子類中的父類部分賦值給了父類對象。


定義一個函數爲虛函數,不代表函數爲不被實現的函數。定義他爲虛函數是爲了允許用基類的指針來調用子類的這個函數。定義一個函數爲純虛函數,才代表函數沒有被實現。定義純虛函數是爲了實現一個接口,起到一個規範的作用,規範繼承這個類的程序員必須實現這個函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章