C 知識總結(14)

2021-08-05 23:16:32 字數 928 閱讀 1078

1、成員變數在使用初始化列表初始化時,與建構函式中初始化成員列表的順序無關,只與定義成員變數的順序有關。因為成員變數的初始化次序是根據變數在記憶體中次序有關,而記憶體中的排列順序早在編譯期就根據變數的定義次序決定了。這點在effectivec++中有詳細介紹。

2、如果不使用初始化列表初始化,在建構函式內初始化時,此時與成員變數在建構函式中的位置有關。

3、注意:類成員在定義時,是不能初始化的

4、注意:類中const成員常量必須在建構函式初始化列表中初始化。

5、注意:類中static成員變數,必須在類外初始化。

6、靜態變數進行初始化順序是基類的靜態變數先初始化,然後是它的派生類。直到所有的靜態變數都被初始化。這裡需要注意全域性變數和靜態變數的初始化是不分次序的。這也不難理解,其實靜態變數和全域性變數都被放在公共記憶體區。可以把靜態變數理解為帶有「作用域」的全域性變數。在一切初始化工作結束後,main函式會被呼叫,如果某個類的建構函式被執行,那麼首先基類的成員變數會被初始化。 

1. 類的成員變數有const修飾; 

2. 類的成員為引用; 

3. 類的成員為沒有預設建構函式的類型別;

4. 如果類存在繼承關係,派生類必須在其初始化列表中呼叫基類的建構函式;

在建構函式中賦值可能會建立臨時物件,而初始化列表則不會。

對於基本型別來說是沒什麼區別的。但對於類物件,初始化列表效能會高一點,否則物件會先呼叫預設建構函式,再呼叫賦值操作符賦值。

預設是public 也可以定義為private, 那麼在單例模式這麼寫的

這是由於編譯系統在我們沒有自己定義拷貝建構函式時,會在拷貝物件時呼叫預設拷貝建構函式,進行的是淺拷貝。指標被分配一次記憶體,但是程式結束時該記憶體卻被釋放了兩次,會造成記憶體洩漏問題!

在對含有指標成員的物件進行拷貝時,必須要自己定義拷貝建構函式,使拷貝後的物件指標成員有自己的記憶體空間,即進行深拷貝,這樣就避免了記憶體洩漏發生。

c 知識總結

第一章節 1.類的兩種定義形式 1 在類中定義成員函式 2 在類之後定義成員函式 2.class 和struct的區別 1 c的struct沒有方法,而c 的struct可以有方法 函式 2 c的struct的成員沒有訪問許可權,c 的class則有,且預設許可權私有 3 c的struct並不能為空...

C 知識總結

c 總結 一丶運算子過載 1丶基本概念 將運算子看作是一種特殊的函式 運算元是函式的引數,運算結果是函式的返回值 2丶運算子函式 定義過載運算子和定義普通函式類似 函式名由關鍵字operator 和其後要定義的運算子組成 operator operator operator 返回型別 運算結果的型別...

C 知識總結

1.概念屬性 概念屬性,屬性就是物件具有的特徵值,每個物件具有的每個屬性都有特徵值。例如 年齡是 23 歲,性別是男等特徵,這個就是物件 的屬性及屬性值。2.物件與類 物件與類的區別 物件是實實在在存在的,具體到那個是物件 類是乙個模板而已,是虛構的,不存在的。比如我現在操作的這部電腦是戴爾電腦,就...