1樓:雜貨鋪
1、概念不同:
解構函式:物件所在的函式已呼叫完畢時,系統自動執行解構函式。
建構函式:是一種特殊的方法。特別的一個類可以有多個建構函式 ,可根據其引數個數的不同或引數型別的不同來區分它們 即建構函式的過載。
2、作用不同:
解構函式:解構函式被呼叫。
建構函式:為物件成員變數賦初始值
3、目的不同:
解構函式:”清理善後” 的工作
建構函式:主要用來在建立物件時初始化物件, 即為物件成員變數賦初始值,總與new運算子一起使用在建立物件的語句中。
2樓:м▂_寶貝灬
建構函式:
什麼是建構函式?通俗的講,在類中,函式名和類名相同的函式稱為建構函式。它的作用是在建立一個物件時,作某些初始化的工作(例如對資料賦予初值)。
c++允許同名函式,也就允許在一個類中有多個建構函式。如果一個都沒有,編譯器將為該類產生一個預設的建構函式。
建構函式上惟一的語法限制是它不能指定返回型別,甚至void 也不行。
不帶引數的建構函式:一般形式為 類名 物件名()
帶引數的建構函式:不帶引數的建構函式,只能以固定不變的值初始化物件。帶引數建構函式的初始化要靈活的多,通過傳遞給建構函式的引數,可以賦予物件不同的初始值。
一般形式為:建構函式名(形參表);
建立物件使用時:類名 物件名(實參表);
建構函式引數的初始值:建構函式的引數可以有預設值。當定義物件時,如果不給出引數,就自動把相應的預設引數值賦給物件。一般形式為:
建構函式名(引數=預設值,引數=預設值,……);
解構函式:
當一個類的物件離開作用域時,解構函式將被呼叫(系統自動呼叫)。解構函式的名字和類名一樣,不過要在前面加上 ~ 。對一個類來說,只能允許一個解構函式,解構函式不能有引數,並且也沒有返回值。
解構函式的作用是完成一個清理工作,如釋放從堆中分配的記憶體。
一個類中可以有多個建構函式,但解構函式只能有一個。物件被析構的順序,與其建立時的順序相反,即後構造的物件先析構。
建構函式和預設建構函式有什麼區別
3樓:300斤大魚
1、建構函式的函式名稱與類名同名,其他方法(函式)名稱可以自定義。
2、建構函式僅在物件被建立時系統會根據給定的引數以及類中的建構函式定義進行選擇呼叫,如果類中沒有定義建構函式,系統預設會提供一個無參構造空函式,什麼都不會做,只是滿足介面要求,建構函式不能被顯式呼叫。其他函式根據程式設計師需要而呼叫,且必須顯式呼叫。
3、由於物件建立後,系統必須返回新建物件的地址,賦值給指標變數(c++,c#中是將引用賦值給物件變數,其實一樣,內部也是物件地址),那麼換句話說,返回介面被系統佔用了,因此建構函式就不能返回任何型別值,所有帶返回值建構函式的定義編譯器都不會通過。結果就是建構函式沒有也不能有返回型別,而其他函式隨意。
4、由於建構函式的作用只是在建立物件時用來初始化成員變數和物件的,因此建構函式不能被繼承也不能使用介面。換句話說,因為建構函式只在物件建立時會被呼叫,其他情況下永遠不會被呼叫,因此如果對一個類定義一個介面,介面中提供了建構函式的介面的話,該函式介面是永遠無法被顯式呼叫的,顯得多餘了,因此如果為建構函式定義介面,編譯器會報錯。(new一個物件的時候new的是類,不會new介面)
c中建構函式與解構函式的問題,C 中建構函式與解構函式的問題
你的getname函式在 你的類定義中只有getscore和getid c 關於建構函式和解構函式呼叫次數的問題 沒問題啊。引數傳遞的時候第一次拷貝構造呼叫,在函式返回的時候賦值給c2 再次呼叫了拷貝構造。析構的話 c1 c2 c 三次 傳遞引數和返回引數各一次拷貝建構函式,所以是2次 有兩個物件c...
解構函式的呼叫,解構函式在何時呼叫
在vc中除錯的話,你可以主動刪除物件,這樣就會呼叫解構函式int main 修改為int main 如樓上所說,如果你的程式視窗是在程式執行後立即關閉的話,你肯定看不到呼叫解構函式的資訊.因為解構函式的呼叫是在main結束後,也就是system pause 執行後,而不是你想像的那樣先呼叫,然後再執...
c解構函式何時呼叫,C 解構函式何時呼叫
建構函式是建立的時候也就是new的時候呼叫,析構是釋放也就是delete的時候呼叫,你new的話應該是呼叫建構函式 也就是 date date int i 程式第39行,people的建構函式裡面有一行date birthday 1 建立了一個date類的臨時變數。當函式退出的時候,這個變數也會被撤...