你熟悉建構函式的呼叫嗎?

2021-06-13 19:26:14 字數 1381 閱讀 3158

#include using namespace std;

class base

~base()

base(const base &b)

base& operator=(const base &b)

};int main()

看看這題的輸出結果:
#include class human 

; static int human_num;

~human()

void print()

protected:

private:

};int human::human_num = 0;

human f1(human x)

int main(int argc, char* argv)

輸出:

human num is: 1

human num is: 1

human num is: 0

human num is: 0

human num is: -1

human num is: -2

----------------------------

分析:1. human h1;  //呼叫建構函式,hum_num++後為1 ;

h1.print();  輸出:"human is 1" 。

2. human h2  = f1(h1); //在呼叫函式 f1(h1)的過程中,由於函式引數是按值傳遞物件,呼叫預設的複製建構函式(實參h1的副本h1_copy給形參x),它並沒有對hum_num++,所以hum_num 仍= 1,所以x.print()輸出:"human is 1" 。

3. 由於該函式 f1返回乙個human 物件(其實返回的是副本),所以又呼叫默複製認建構函式,建立乙個返回值的副本 h1_return。

4. 在退出函式

f1 時,要銷毀實參h1傳遞過來的副本物件h1_copy,呼叫析構函式(human_num--),輸出:"human is 0"。

5. 把返回值的副本賦給h2,又呼叫預設建構函式(  human_num = 0);   h2.print();   //輸出: human is 0;

6. 在退出main()函式的時候,先銷毀h2,呼叫析構函式(human_num--),輸出"human_num is -1"。

7.  然後銷毀h1,呼叫析構函式(human_num--),輸出"human_num is -2"。

構造函式呼叫建構函式

題目如下 問下列 的列印結果為0嗎?include stdlib.h include iostream using namespace std struct clscls int main 列印結果是不定的,不一定為0 奇怪的地方在於建構函式中呼叫了自己的另乙個建構函式 我們知道,當定義乙個物件時,...

建構函式的呼叫

傳智掃地僧課程學習筆記。無參建構函式,有參建構函式,拷貝建構函式,決定,用乙個物件給另乙個物件賦值時候,怎麼去操作,void main22 0呼叫無參建構函式 test2 t0 1括號法 test2 t1 1,2 呼叫引數建構函式 c 編譯器自動的呼叫建構函式 t1.printt 2 號法 test...

C 中構造函式呼叫建構函式

include include using namespace std struct cls cls int main 列印結果是不定的,不一定為0 奇怪的地方在於建構函式中呼叫了自己的另乙個建構函式 我們知道,當定義乙個物件時,會按順序做2件事情 1 分配好記憶體 非靜態資料成員是未初始化的 2 ...