C 複習筆記

2022-09-23 10:00:11 字數 1321 閱讀 4466

很久沒有碰c++,下個專案要開始使用c++,所以很多東西需要撿起來重新看看。從今天起記錄一些筆記,方便自己今後查閱。言歸正傳,先從建構函式的初始化列表說起。我把這個知識點細化成3個問題,1.為什麼要有初始化列表,它和建構函式中初始化有什麼不一樣。2.初始化的順序。3.一些注意的細節。

先說第乙個問題。我們有兩個東西,是必須在初始化列表裡完成的,乙個是const修飾的變數,乙個是引用。這點我就不細說了,查閱資料的都可以找到。下面我具體說說類成員。

class test1

test1(int i)

test1(const test1 &obj)

test1& operator = (const test1 &obj)

~test1() };

我定義乙個類,然後再定義乙個類,其中包含test1

class test2

private:

test1 t1;

};我們在建構函式中初始化test1,我們看看執行結果

test1 default constructor

test1 value constructor

test1 = constructor

test1 destructor

test1 destructor

我們分析下這個輸出。test1 default constructor,這說明在進入test1建構函式之前,已經初始化了t1成員,並且呼叫的是無參建構函式。test1 value constructor這個是test1(1)建立出來的物件。test1 = constructor,這個表示條用了拷貝建構函式,test1 destructor這個表示test1(1)這個臨時物件的析構,test1 destructor這個表示是t1這個成員物件的析構。從上面的結果來看,建構函式中t1 = test1(1);其實並不是真正意義是上的初始化,而是一次拷貝賦值。當進入建構函式內部之前,類成員會被預設建構函式初始化。如果說test1是個很大的物件,這塊會造成效能上的開銷。所以,這點也是使用初始化列表的原因之一。

第二我們再來說下順序問題。簡單的原則是初始化列表裡的會先於建構函式中,初始化列表裡會按照變數宣告的順序。我們具體看看下面的例子。

class test3()

private:

int _x,_y,_z;

};按照上面的說法,賦值的順序是_y,_z,_x。

第三個是注意問題,每個成員只能在初始化列表裡出現一次。

class test3 www.2cto.com

private:

int _x,_y,_z;

};比如這種就是問題的。_z被初始化了2次。

作者:yg2362

C 複習筆記

一 1 資料的型別 型別 型別識別符號 位元組數 數值範圍 整形 int 4 正負21億多 無符號整形 unsigned int 4 0 42億 短整型 short int 2 正負3萬 無符號短整型 unsigned short int 2 0 6萬多 長整形 long int 4 正負21億 字...

C 學習筆記 複習筆記

1.靜態成員 1 在c 沒有全域性函式,static函式相當於全域性函式 2 靜態函式不支援this指標 3 靜態函式的引數必須是靜態的 4 靜態建構函式在生成物件前完成一些工作 5 靜態類不能例項化 靜態類是密封的,不能派生 不能包含非靜態成員 11.如果物件要控制非託管的資源,用完後或釋放資源,...

C 複習筆記(3)

static void main string args while guess number console.writeline you are correct and it only took you guesses guesses ps 如果應用程式在乙個較快的計算機上執行,則該計算機的系統時...