c 類物件初始化方式總結

2021-09-25 15:46:14 字數 757 閱讀 4991

在《inside the c++ object model》一書中談到copy constructor的構造操作,有三種情況下,會以乙個object的內容作為另乙個object的初值:

第一種情況: xx aa = a;

第二種情況: xx aa(a);

第三種情況: extern fun(xx aa); fun(a)函式呼叫

第四種情況: xx fun(); xx a = fun();函式返回值的時候

下面我們就上述的四種情況來一一驗證:

class classtest

classtest& operator=(const classtest &ct) //過載賦值操作符

classtest(const char *pc)

classtest(const classtest& ct)//複製建構函式

private:

char c[256];

};classtest func(classtest temp)

int main()

測試結果:

我們可以看到,比較複雜的是ct6和ct7,其中ct6還是比較好理解的,ct7這種情況比較難懂,為什麼會有兩個拷貝建構函式的呼叫????

第一次拷貝建構函式的呼叫:第一次很簡單,是因為函式引數的傳遞,將ct6作為引數傳遞給temp,用ct6的值初始化temp會呼叫拷貝建構函式;

初始化類物件

初始化類物件 趙湘寧問題 c 中如何初始化類中的表資料?在c語言中,我能像下面這樣初始化結構陣列 struct mystruct mystruct table etc 但是如果mystruct是個c 類,而不是結構,我編譯就會出錯。我覺得這是c 的乙個不足。解答 這個問題完全取決於你如何看待c c ...

C 初始化方式

變數被預設初始化由變數型別和定義變數的位置決定,如果內建型別定義的變數在任何函式體之外即全域性變數,則被預設初始化為相關型別的預設值,如int型預設值為0,如果定義的變數位置在任何函式體之內即區域性變數,則不被初始化,乙個未被初始化的變數是未定義的,將會報錯。如果使用等號 初始化乙個變數,實際上執行...

C 初始化vector物件的方式

初始化vector物件的方式 vectorv1 v1是乙個空vector,他的元素型別為t,執行預設初始化 vectotv2 v1 v2中包含v1所有元素的副本 vectotv2 v1 等價於v2 v1 vectotv3 n,val v3包含了n個重複的元素,每個元素的值都是val vectotv4...