復(fù)制構(gòu)造函數(shù)的功能是用一個已知對象來初始化另一個同類的對象。復(fù)制構(gòu)造函數(shù)其實也是類的構(gòu)造函數(shù),只不過被調(diào)用的時候,會自動將一個已知對象的數(shù)據(jù)成員的值拷貝給另一個同類對象。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序制作、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了橋東免費建站歡迎大家使用!
拷貝構(gòu)造函數(shù)是能夠復(fù)制拷貝一份對象。也就是說對先有的對象,可以利用拷貝構(gòu)造函數(shù)復(fù)制一份。
C++ 拷貝構(gòu)造函數(shù)什么時候被調(diào)用呢?用已經(jīng)創(chuàng)建好的類對象來初始化新的對象。當我們之前已經(jīng)創(chuàng)建好了一個類的對象時,我們可以用這個類對象來初始化一個新的對象,這時候,就需要用到拷貝構(gòu)造函數(shù)。
用一個已有的對象來初始化一個被創(chuàng)建的同類的對象,是一種特殊的構(gòu)造函數(shù),具有一般構(gòu)造函數(shù)的所有特性,其形參是本類對象的引用。用戶可以根據(jù)自己實際問題的需要定義特定的拷貝構(gòu)造函數(shù),以實現(xiàn)同類對象之間數(shù)據(jù)成員的傳遞。
拷貝構(gòu)造函數(shù),又稱復(fù)制構(gòu)造函數(shù),是一種特殊的構(gòu)造函數(shù),它由編譯器調(diào)用來完成一些基于同一類的其他對象的構(gòu)建及初始化。其唯一的形參必須是引用,但并不限制為const,一般普遍的會加上const限制。
當然,屬性也可以。舉例,a有個name的屬性,叫ABC,然后我的復(fù)制構(gòu)造函數(shù)里寫,任何的復(fù)制對象,名字叫clone+原來的名字……可以這么用……那b的NAME就是cloneABC。
其原因如下:當一個對象以傳遞值的方式傳一個函數(shù)的時候,拷貝構(gòu)造函數(shù)自動被調(diào)用來生成函數(shù)中的對象(符合拷貝構(gòu)造函數(shù)調(diào)用的情況)。
拷貝構(gòu)造函數(shù)必須以引用的形式傳遞(參數(shù)為引用值)。當一個對象以傳遞值的方式傳一個函數(shù)的時候,拷貝構(gòu)造函數(shù)自動的被調(diào)用來生成函數(shù)中的對象。
這個函數(shù)的寫法是沒問題的,如果一個函數(shù)的返回值是一個類的對象,那么該類的拷貝函數(shù)會被調(diào)用,所以你要確保你的拷貝構(gòu)造函數(shù)沒有問題,如果Cset類中不涉及指針的話,一般缺省的拷貝構(gòu)造函數(shù)也是可以的。
直接初始化:直接初始化,是把初始化式放在圓括號中的。對于類類型來說,直接初始化總是調(diào)用與實參匹配的構(gòu)造函數(shù)來初始化的。
拷貝構(gòu)造函數(shù)是能夠復(fù)制拷貝一份對象。也就是說對先有的對象,可以利用拷貝構(gòu)造函數(shù)復(fù)制一份。
拷貝函數(shù)是特殊的構(gòu)造函數(shù),用來完成對象初始化,即定義時賦值,下面程序中有詳解。如果沒有定義,系統(tǒng)會調(diào)用默認的拷貝構(gòu)造函數(shù),但此函數(shù)不能處理深拷貝問題,及若有new用到,系統(tǒng)的只是共享區(qū)域,不分配新空間。
用戶可以根據(jù)自己實際問題的需要定義特定的拷貝構(gòu)造函數(shù),以實現(xiàn)同類對象之間數(shù)據(jù)成員的傳遞。
因為你不忽略拷貝構(gòu)造函數(shù)的時候,編譯器會給你生成一個按數(shù)據(jù)位拷貝的一個默認版本,即把類的數(shù)據(jù)成員直接拷貝到新的對象中。
在C++中,下面三種對象需要拷貝的情況。因此,拷貝構(gòu)造函數(shù)將會被調(diào)用。