調(diào)用拷貝構(gòu)造函數(shù)的三種情況 什么是拷貝構(gòu)造函數(shù)?拷貝構(gòu)造函數(shù)何時(shí)被調(diào)用?
什么是拷貝構(gòu)造函數(shù)?拷貝構(gòu)造函數(shù)何時(shí)被調(diào)用?在C中,以下三種對(duì)象需要調(diào)用復(fù)制構(gòu)造函數(shù)(有時(shí)也稱為“復(fù)制構(gòu)造函數(shù)”):1)作為函數(shù)參數(shù)的對(duì)象通過(guò)傳遞值傳遞到函數(shù)體中;2)作為函數(shù)返回值的對(duì)象通過(guò)傳遞值從
什么是拷貝構(gòu)造函數(shù)?拷貝構(gòu)造函數(shù)何時(shí)被調(diào)用?
在C中,以下三種對(duì)象需要調(diào)用復(fù)制構(gòu)造函數(shù)(有時(shí)也稱為“復(fù)制構(gòu)造函數(shù)”):
1)作為函數(shù)參數(shù)的對(duì)象通過(guò)傳遞值傳遞到函數(shù)體中;
2)作為函數(shù)返回值的對(duì)象通過(guò)傳遞值從函數(shù)返回;
3)對(duì)象用于初始化另一個(gè)對(duì)象(通常稱為賦值初始化);直接調(diào)用函數(shù)和在定義時(shí)定義后續(xù)調(diào)用有什么區(qū)別?這不是區(qū)別。困難的方法是在編譯器復(fù)制S1時(shí)調(diào)用S2復(fù)制方法。
構(gòu)造函數(shù)什么時(shí)候被調(diào)用,復(fù)制構(gòu)造函數(shù)是么時(shí)候被調(diào)用?
方法仍有問(wèn)題。構(gòu)造函數(shù)包括復(fù)制構(gòu)造函數(shù)。在創(chuàng)建對(duì)象時(shí)調(diào)用構(gòu)造函數(shù)。關(guān)鍵詞:創(chuàng)建時(shí),a是形式。指針類型僅在新建時(shí)調(diào)用復(fù)制構(gòu)造函數(shù)。它也是構(gòu)造器。當(dāng)用一個(gè)對(duì)象作為參數(shù)創(chuàng)建另一個(gè)對(duì)象時(shí),或者賦值(同樣關(guān)注于創(chuàng)建),比如a(b)a=b,下面不調(diào)用復(fù)制構(gòu)造函數(shù)。A、 默認(rèn)情況下調(diào)用B(無(wú)參數(shù))。分配了A=B
1。當(dāng)一個(gè)對(duì)象被創(chuàng)建時(shí),其他對(duì)象被用來(lái)初始化
person P(q)//在這種情況下,復(fù)制構(gòu)造函數(shù)被用來(lái)創(chuàng)建一個(gè)實(shí)例。P
person P=q//在本例中,復(fù)制構(gòu)造函數(shù)用于初始化實(shí)例。P
2。當(dāng)一個(gè)對(duì)象作為函數(shù)參數(shù)傳遞值時(shí)
f(P)//此時(shí),P作為函數(shù)參數(shù)傳遞。當(dāng)p放在堆棧上時(shí),會(huì)調(diào)用copy構(gòu)造函數(shù)來(lái)創(chuàng)建一個(gè)局部對(duì)象,該對(duì)象的作用域與函數(shù)中的局部變量相同
需要注意的是賦值不會(huì)調(diào)用copy構(gòu)造函數(shù),但是賦值運(yùn)算符(重載)有效
P=q//此時(shí)沒(méi)有對(duì)復(fù)制構(gòu)造函數(shù)的調(diào)用
!請(qǐng)記住,如果聲明了一個(gè)對(duì)象并為其分配了另一個(gè)現(xiàn)有對(duì)象,則將調(diào)用復(fù)制構(gòu)造函數(shù);如果已存在一個(gè)對(duì)象,然后為其分配了另一個(gè)現(xiàn)有對(duì)象,則將調(diào)用賦值運(yùn)算符(重載)。默認(rèn)的復(fù)制構(gòu)造函數(shù)和賦值運(yùn)算符都是“淺”復(fù)制“,只是復(fù)制字段,所以如果對(duì)象包含動(dòng)態(tài)分配的內(nèi)存,我們需要重寫(xiě)復(fù)制構(gòu)造函數(shù)或重載賦值運(yùn)算符來(lái)實(shí)現(xiàn)“深復(fù)制”,以確保數(shù)據(jù)的完整性和安全性。
C 構(gòu)造函數(shù)什么時(shí)候會(huì)被調(diào)用?
生成對(duì)象時(shí)會(huì)調(diào)用構(gòu)造函數(shù)。可以定義或新分配。調(diào)用哪個(gè)構(gòu)造函數(shù)取決于構(gòu)造參數(shù)。如果構(gòu)造參數(shù)是同一類型的另一個(gè)對(duì)象,則它是一個(gè)復(fù)制構(gòu)造函數(shù)。如果沒(méi)有參數(shù),則為無(wú)參數(shù)或默認(rèn)構(gòu)造。析構(gòu)函數(shù)是在對(duì)象生命周期結(jié)束時(shí)調(diào)用的,也就是說(shuō),當(dāng)它被釋放時(shí),新對(duì)象將在它們被刪除和超出范圍時(shí)調(diào)用局部變量。程序退出時(shí)將調(diào)用全局變量和靜態(tài)局部變量。
何時(shí)調(diào)用構(gòu)造函數(shù),復(fù)制構(gòu)造函數(shù),析構(gòu)函數(shù)?
什么時(shí)候必須重寫(xiě)拷貝構(gòu)造函數(shù)?
父類和子類都有靜態(tài)代碼塊和構(gòu)造函數(shù)時(shí),父類和子類靜態(tài)變量的執(zhí)行順序,執(zhí)行順序如下:
父類靜態(tài)代碼塊>子類靜態(tài)代碼塊
父類構(gòu)造函數(shù)>子類構(gòu)造函數(shù)(父類先,子類后)
如果是多級(jí)繼承,則先執(zhí)行最高級(jí)別的父類,然后依次遞減:靜態(tài)執(zhí)行優(yōu)先,父類優(yōu)先。注意:靜態(tài)代碼塊在JVM加載類時(shí)執(zhí)行,靜態(tài)代碼塊只執(zhí)行一次
2.
調(diào)用類中的方法時(shí),在執(zhí)行方法體之前,必須為類中的成員變量賦值。如果代碼中沒(méi)有指定特定值,則會(huì)有一個(gè)默認(rèn)值。成員變量的賦值順序是before和after。如果既有直接賦值,又有施工方法賦值,則可以按順序執(zhí)行。三。Override重載是方法的名稱,返回類型相同。唯一的區(qū)別是方法的參數(shù)不同(參數(shù)類型或參數(shù)類型不同)。重寫(xiě):1發(fā)生方法重寫(xiě)的兩個(gè)方法的返回值、方法名稱和參數(shù)列表必須相同。2子類引發(fā)的異常不能超過(guò)父類的相應(yīng)方法引發(fā)的異常。三。子類方法的訪問(wèn)級(jí)別不能低于父類(public、package、protected、private)多態(tài)性的相應(yīng)方法的訪問(wèn)級(jí)別:
父類的引用指向子類的對(duì)象。調(diào)用時(shí)執(zhí)行的方法也是子類的方法。將不執(zhí)行父類的方法。所謂多態(tài)性是指父類或接口類型的引用可以指向?qū)崿F(xiàn)接口的類的子類或?qū)嵗▽?duì)象)