1樓:匿名使用者
呼叫複製建構函式的情形:
1、按傳值方式傳遞物件
2、當物件按傳值方式從函式返回
3、當物件在宣告過程中初始化時。
朋友,你可以發現,b x的時候,先呼叫了a的建構函式,而後呼叫了b的建構函式。但是你下面:
a y = x;
物件a是在宣告的過程中初始化了,故而不呼叫建構函式。它呼叫了系統自動給你生成的乙個預設的複製建構函式,所以什麼都沒有做。如果你為類a寫乙個複製建構函式,如下:(我稍稍改寫了一下)
#include
using namespace std;
static int num=0;
class a
void myfunc()
那麼會呼叫你寫的那個複製建構函式。
輸出結果如下:
a num++:1
b num++:2
heihei!
a 拷貝建構函式 num++:3
heihei!
a num--:2
b num--:1
a num--:0
可以看到,生成b物件時,先呼叫a的建構函式,再呼叫b的建構函式,結束的時候順序相反。但是,生成a物件的時候,由於你用的a y = x; 此時需要呼叫a的拷貝建構函式,所以,不會呼叫a的建構函式了。於是,你會看到上面的輸出結果。
希望能對你有所幫助!
2樓:匿名使用者
b x;這裡會先呼叫基類的建構函式,再呼叫b本身的建構函式
a y=x;這裡僅僅是位賦值,並沒有呼叫建構函式
函式結束時,y,x銷毀時,先呼叫y的析構函式,再呼叫x中b類的析構函式,再呼叫基類的析構函式
3樓:匿名使用者
你直接執行下不就知道了嘛 首先b x;會執行a的構造 然後b的構造;
a y=x;是直接賦值不是執行a的建構函式;
然後呼叫方法輸出heihei;
最後 析構b 執行 a的析構函式 然後b的析構函式;
析構 a 執行 a的析構函式;;
4樓:匿名使用者
單純你指的這一句一次都沒調,只是將位址賦了一下值而已。第一句先呼叫a的構造再呼叫b的構造,最後一句先呼叫a再呼叫b再呼叫a,自己除錯以下
求高手解疑在某c演算法中看到有符號請問下這兩個符號
交換的意思!最後,你懂得了 給不給就看你了 c語言演算法裡很像趨向於的那個符號是什麼意思 就是這個 這個不是c語言的符號 跟c語言沒任何關係 只是寫書人的一種習慣 我以前用的書也是這個樣子還讓我納悶了好一陣 比如1 p 其實意思就是把1這個值賦給p 可以理解成p 1後面的自己推吧 c 中 和 兩個符...
求C 高手指教,求答案,求c語言或者c 高手指教!一段計算bmp圖片畫素大小的小程式,誰能幫忙解釋一下它的計算原理呢?
第五題是不是該有個圖?好吧是我傻了,樓下回答得好。6.條件,迴圈體 我不太確定名詞對不對 7.do,for,while for while可換順序 8.break 9.continue 10.return 關於用c 語言求兩個順序表並集的問題,求高手指教 for int i 0 i 5 i 問題 f...
C語言問題,求高手幫忙,C語言問題,求高手幫忙!!
1.輸入輸出問題,在輸入整數或浮點數後面直接輸入字元或字串,要清除一下回車號,或都在輸入整數後直接清空快取,再讀取內容 2.越界問題,修正問題1後,如果記憶體裡沒有連繼的 0 字元,你這程式會嚴重越界 語句 k j 1 前加一句 if c j 0 break 到尾就不要再迴圈了,防止越界 改完後的效...