c 基礎知識整理(一)

2021-07-11 16:06:06 字數 2841 閱讀 8813

一、標頭檔案

1)、#define保護:為防止標頭檔案被多重包含,檔案的格式應該為  |___h__,這樣寫是為了保證其唯一性;

2)、內聯函式: 在編譯的時候,編譯器會將它自動展開;所以合理的使用內聯函式會提高效率;內聯函式一般都是短小的,但要除for,while這類的。

有些函式即使不加了inline 也不一定會變成內聯函式,這都是現在編譯器優化的結果。

3)、標頭檔案的順序:" " 最開始search 當前路徑,在search 系統路徑(包含path);<>先search系統路徑,不search 當前路徑;

一般引用標頭檔案的先後順序如下:self標頭檔案、系統c/c++標頭檔案、其他專案標頭檔案、本專案的標頭檔案。對於平台不同的條件編譯,可以放到最後。

特別要注意:做應用標頭檔案的時候,最好不要使用./..這種,最好使用include 「path/include.h」;這樣的好處能夠更明確其依賴關係。

二、建構函式

1)、定義:是一種特殊的方法。主要用來在建立物件時初始化物件, 即為物件

成員變數

賦初始值,總與new

運算子一起使用在建立物件的語句中。特別的乙個類可以有多個建構函式 ,可根據其引數個數的不同或引數型別的不同來區分它們 即建構函式。

2)、種類: 無參建構函式:如果建立乙個類你沒有寫任何

建構函式

,則系統會自動生成預設的無參

建構函式

,函式為空,什麼都不做

只要你寫了乙個下面的某一種

建構函式

,系統就不會再自動生成這樣乙個預設的

建構函式

,如果希望有乙個這樣的無參

建構函式

,則需要自己顯示地寫出來 有

參建構函式(過載建構函式):一般

建構函式

可以有各種引數形式,乙個類可以有多個一般

建構函式

,前提是引數的個數或者型別不同(基於c++的過載函式原理)

例如:你還可以寫乙個 complex( int num)的

建構函式

出來建立物件時根據傳入的引數不同呼叫不同的

建構函式

拷貝建構函式(複製建構函式):複製

建構函式

引數為類物件本身的引用,用於根據乙個已存在的物件複製出乙個新的該類的物件,一般在函式中會將已存在物件的資料成員的值複製乙份到新建立的物件中;

若沒有顯示的寫複製

建構函式

,則系統會預設建立乙個複製

建構函式

,但當類中有指標成員時,由系統預設建立該複製

建構函式

會存在風險,具體原因請查詢 有關 「淺拷貝」 、「深拷貝」的文章論述。

注意:型別轉換建構函式,根據乙個指定的型別的物件建立乙個本類的物件

,需要注意的一點是,這個其實就是一般的建構函式,但是對於出現這種單引數的建構函式,c++會預設將引數對應的型別轉換為該類型別,有時候這種隱私的轉換是我們所不想要的,所以需要使用explicit來限制這種轉換。

三、析構函式

1)、定義:析構函式

(destructor) 與

建構函式

相反,當物件結束其

生命週期

時(例如物件所在的函式已呼叫完畢),系統自動執行

析構函式

。析構函式

往往用來做「清理善後」 的工作(例如在建立物件時用new開闢了一片記憶體空間,應在退出前在

析構函式

中用delete釋放)。

2)、作用:資源釋放。

注意:對於基類,特別要注意虛析構函式的宣告;一般,如果基類有虛函式,就宣告成虛析構函式。

四、引用:

1)、引用和指標的區別:

(1)指標:指標是乙個變數,只不過這個變數儲存的是乙個位址,指向記憶體的乙個儲存單元;而引用跟原來的變數實質上是同乙個東西,只不過是原變數的乙個別名而已。如:

int a=1;int *p=&a;

int a=1;int &b=a;

上面定義了乙個整形變數和乙個指標變數p,該指標變數指向a的儲存單元,即p的值是a儲存單元的位址。

而下面2句定義了乙個整形變數a和這個整形a的引用b,事實上a和b是同乙個東西,在記憶體占有同乙個儲存單元。

(2)可以有const指標,但是沒有const引用;

(3)指標可以有多級,但是引用只能是一級(int **p;合法 而 int &&a是不合法的)

(4)指標的值可以為空,但是引用的值不能為null,並且引用在定義的時候必須初始化;

(5)指標的值在初始化後可以改變,即指向其它的儲存單元,而引用在進行初始化後就不會再改變了。

(6)"sizeof引用"得到的是所指向的變數(物件)的大小,而"sizeof指標"得到的是指標本身的大小;

(7)指標和引用的自增(++)運算意義不一樣;

2)、引用使用場合:一般用於函式的引數傳遞和返回值,

五、const 用法:

為什麼使用const?採用符號常量寫出的**更容易維護;指標常常是邊讀邊移動,而不是邊寫邊移動;許多函式引數是唯讀不寫的。const最常見用途是作為陣列的界和switch分情況標號(也可以用列舉符代替),分類如下:

常變數:const

型別說明符 變數名

常引用:const

型別說明符 &引用名

常物件:類名 const

物件名

常成員函式:類名::fun(形參) const

常陣列:型別說明符 const

陣列名[大小]

常指標:const

型別說明符* 指標名 ,型別說明符* const

指標名

C 基礎知識整理

在c 98中,有63個關鍵字。不能遺漏標準名稱,任何不帶標準名稱來說關鍵字個數都是耍流氓 1.定義命名空間,需要用到namespace關鍵字,後面跟命名空間的名字,然後接 中即為命名空間的成員。2.命名空間的使用 namespace n int main using n b int main usi...

C 基礎知識整理 基礎知識(2) 類

類,是物件導向語言的基礎。類的三大特性 封裝 繼承 多型。最基本的特性就是封裝性。程式設計師用程式描述世界,將世界的所有事物都看成物件,怎麼描述這個物件?那就是類了。也就是用類來封裝物件。用書上的話說,類是具有相同屬性和行為的物件的抽象。寶馬汽車 別克汽車 五菱之光汽車.基本具有相同的屬性和行為,所...

C 基礎知識整理 基礎知識(2) 類

類,是物件導向語言的基礎。類的三大特性 封裝 繼承 多型。最基本的特性就是封裝性。程式設計師用程式描述世界,將世界的所有事物都看成物件,怎麼描述這個物件?那就是類了。也就是用類來封裝物件。用書上的話說,類是具有相同屬性和行為的物件的抽象。寶馬汽車 別克汽車 五菱之光汽車.基本具有相同的屬性和行為,所...