真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++中類對(duì)象的拷貝構(gòu)造函數(shù)

本篇內(nèi)容主要講解“C++中類對(duì)象的拷貝構(gòu)造函數(shù)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“C++中類對(duì)象的拷貝構(gòu)造函數(shù)”吧!

十年的龍灣網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都營(yíng)銷(xiāo)網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整龍灣建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“龍灣網(wǎng)站設(shè)計(jì)”,“龍灣網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

拷貝構(gòu)造函數(shù),是一種特殊的構(gòu)造函數(shù),它由編譯器調(diào)用來(lái)完成一些基于同一類的其他對(duì)象的構(gòu)建及初始化。其***的參數(shù)(對(duì)象的引用)是不可變的(const類型)。此函數(shù)經(jīng)常用在函數(shù)調(diào)用時(shí)用戶定義類型的值傳遞及返回??截悩?gòu)造函數(shù)要調(diào)用基類的拷貝構(gòu)造函數(shù)和成員函數(shù)。如果可以的話,它將用常量方式調(diào)用,另外,也可以用非常量方式調(diào)用。

對(duì)于普通類型的對(duì)象來(lái)說(shuō),它們之間的復(fù)制是很簡(jiǎn)單的,例如:

int a=100;  int b=a;

而類對(duì)象與普通對(duì)象不同,類對(duì)象內(nèi)部結(jié)構(gòu)一般較為復(fù)雜,存在各種成員變量。下面看一個(gè)類對(duì)象拷貝的簡(jiǎn)單例子。

#include   using namespace std;  class CA  {  public:  CA(int b)  {  a=b;  }  void Show ()  {  cout<

運(yùn)行程序,屏幕輸出100。 從以上代碼的運(yùn)行結(jié)果可以看出,系統(tǒng)為對(duì)象B分配了內(nèi)存并完成了與對(duì)象A的復(fù)制過(guò)程。 就類對(duì)象而言,相同類型的類對(duì)象是通過(guò)拷貝構(gòu)造函數(shù)來(lái)完成整個(gè)復(fù)制過(guò)程的。下面我們舉例說(shuō)明拷貝構(gòu)造函數(shù)的工作過(guò)程。

#include   using namespace std;  class CA  {  public:  CA(int b)  {  a=b;  }  CA(const CA& C)  {  a=C.a;  }  void Show()  {  cout<

CA(const CA& C)就是我們自定義的拷貝構(gòu)造函數(shù)??梢?jiàn),拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),函數(shù)的名稱必須和類名稱一致,它的***的一個(gè)參數(shù)是本類型的一個(gè)引用變量,該參數(shù)是const類型,不可變的。例如:類X的拷貝構(gòu)造函數(shù)的形式為X(X& x)。

當(dāng)用一個(gè)已初始化過(guò)了的自定義類類型對(duì)象去初始化另一個(gè)新構(gòu)造的對(duì)象的時(shí)候,拷貝構(gòu)造函數(shù)就會(huì)被自動(dòng)調(diào)用。也就是說(shuō),當(dāng)類的對(duì)象需要拷貝時(shí),拷貝構(gòu)造函數(shù)將會(huì)被調(diào)用。以下情況都會(huì)調(diào)用拷貝構(gòu)造函數(shù):

  • 一個(gè)對(duì)象以值傳遞的方式傳入函數(shù)體

  • 一個(gè)對(duì)象以值傳遞的方式從函數(shù)返回

  • 一個(gè)對(duì)象需要通過(guò)另外一個(gè)對(duì)象進(jìn)行初始化。  

如果在類中沒(méi)有顯式地聲明一個(gè)拷貝構(gòu)造函數(shù),那么,編譯器將會(huì)自動(dòng)生成一個(gè)默認(rèn)的拷貝構(gòu)造函數(shù),該構(gòu)造函數(shù)完成對(duì)象之間的位拷貝。位拷貝又稱淺拷貝,后面將進(jìn)行說(shuō)明。

自定義拷貝構(gòu)造函數(shù)是一種良好的編程風(fēng)格,它可以阻止編譯器形成默認(rèn)的拷貝構(gòu)造函數(shù),提高源碼效率。
淺拷貝和深拷貝

在某些狀況下,類內(nèi)成員變量需要?jiǎng)討B(tài)開(kāi)辟堆內(nèi)存,如果實(shí)行位拷貝,也就是把對(duì)象里的值完全復(fù)制給另一個(gè)對(duì)象,如A=B。這時(shí),如果B中有一個(gè)成員變量指針已經(jīng)申請(qǐng)了內(nèi)存,那A中的那個(gè)成員變量也指向同一塊內(nèi)存。這就出現(xiàn)了問(wèn)題:當(dāng)B把內(nèi)存釋放了(如:析構(gòu)),這時(shí)A內(nèi)的指針就是野指針了,出現(xiàn)運(yùn)行錯(cuò)誤。

深拷貝和淺拷貝可以簡(jiǎn)單理解為:如果一個(gè)類擁有資源,當(dāng)這個(gè)類的對(duì)象發(fā)生復(fù)制過(guò)程的時(shí)候,資源重新分配,這個(gè)過(guò)程就是深拷貝,反之,沒(méi)有重新分配資源,就是淺拷貝。下面舉個(gè)深拷貝的例子。

#include   using namespace std;  class CA  {  public:  CA(int b,char* cstr)  {  a=b;  str=new char[b];  strcpy(str,cstr);  }  CA(const CA& C)  {  a=C.a;  str=new char[a]; //深拷貝  if(str!=0)  strcpy(str,C.str);  }  void Show()  {  cout<

到此,相信大家對(duì)“C++中類對(duì)象的拷貝構(gòu)造函數(shù)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


文章名稱:C++中類對(duì)象的拷貝構(gòu)造函數(shù)
文章網(wǎng)址:http://weahome.cn/article/jgssis.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部