#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 ...