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