久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

C++構(gòu)造函數(shù)和析構(gòu)函數(shù)

 quandsu 2013-08-22

▌構(gòu)造函數(shù):

①構(gòu)造函數(shù)一般是公有的,,作用是初始化數(shù)據(jù)成員。

②構(gòu)造函數(shù)一般不能被顯式調(diào)用,,他們總是被編譯器自動(dòng)調(diào)用的,。一個(gè)類可以有多個(gè)構(gòu)造函數(shù)。

③構(gòu)造函數(shù)和類同名。一個(gè)類里如果有多個(gè)構(gòu)造函數(shù),,那么參數(shù)(個(gè)數(shù)/類型)必然不同,。

④構(gòu)造函數(shù)返回一個(gè)類的對(duì)象。但是構(gòu)造函數(shù)卻沒有返回類型,,也不允許有(void都不能有),。

⑤如果一個(gè)構(gòu)造函數(shù)沒有參數(shù),這個(gè)構(gòu)造函數(shù)叫“默認(rèn)構(gòu)造函數(shù)”,。如果在類里沒有定義構(gòu)造函數(shù),,編譯器將生成一個(gè)默認(rèn)的構(gòu)造函數(shù)。默認(rèn)的構(gòu)造函數(shù)將不會(huì)初始化數(shù)據(jù)成員,。如果我們顯式的定義了一個(gè)構(gòu)造函數(shù),。編譯器將不再會(huì)自動(dòng)生成一個(gè)默認(rèn)的構(gòu)造函數(shù)。

★拷貝構(gòu)造函數(shù):從已經(jīng)存在的一個(gè)對(duì)象來拷貝一份,,用拷貝的東西來創(chuàng)建一個(gè)新的對(duì)象,。

例:
 class A
 {
 public:
☆  A(); //默認(rèn)構(gòu)造函數(shù);
☆  A(int, int); //標(biāo)準(zhǔn)的構(gòu)造函數(shù),;
☆  A(int a=1); //變體的默認(rèn)構(gòu)造函數(shù),;
☆  A(const A& a); //拷貝構(gòu)造函數(shù);
 },;
 int main()
 {
  A b;
☆  A a(b); //拷貝構(gòu)造,;

☆  A c=b; //拷貝構(gòu)造,在賦值之前c不存在,,所以不是賦值,,而是拷貝構(gòu)造一個(gè)新的對(duì)象c;

  A d;
☆  d=b;    //對(duì)象之間成員的一一賦值,,因?yàn)閐是已經(jīng)存在的對(duì)象,;
 
  A x;
☆  A* p=new A(x); //調(diào)用拷貝構(gòu)造函數(shù),把對(duì)象的地址賦給了p,。在棧上分配的空間有名字,,
    在堆上分配的空間沒有名字,只有地址,;

  A a;
  a.foo();
  A* pa=new A();
  pa->foo();
 

▲拷貝構(gòu)造被條用的情況:

①用已經(jīng)存在的對(duì)象來初始化另一個(gè)對(duì)象,;

②用對(duì)象做函數(shù)的參數(shù)傳值的時(shí)候,或者函數(shù)返回一個(gè)對(duì)象值時(shí)調(diào)用拷貝構(gòu)造函數(shù),;

③用new來動(dòng)態(tài)分配內(nèi)存的時(shí)候,;【A* p=new A(x);】

例:
 void func(A a); //值傳遞,;
 A func();
 
 A c;
 func(c); //傳值的時(shí)候形參是實(shí)參的一個(gè)拷貝,;
 
△在特殊情況下,,參數(shù)必須傳引用,如果傳值,,拷貝函數(shù)將陷入一個(gè)無限的循環(huán),。

如果沒有定義拷貝構(gòu)造函數(shù),編譯器會(huì)提供一個(gè)默認(rèn)的拷貝構(gòu)造函數(shù),,但這個(gè)拷貝函數(shù)只實(shí)現(xiàn)一個(gè)淺拷貝(logic copy),。

▌析構(gòu)函數(shù):是一個(gè)特殊的函數(shù),是用來釋放內(nèi)存的,,當(dāng)對(duì)象離開作用域的時(shí)候。

①析構(gòu)函數(shù)不能被顯式調(diào)用,;

②析構(gòu)函數(shù)和類同名,,多了一個(gè)“~”;

③析構(gòu)函數(shù)沒有返回值,,也不允許有返回類型,;

④如果沒有定義一個(gè)析構(gòu)函數(shù),編譯器會(huì)默認(rèn)的生成一個(gè)析構(gòu)函數(shù),,但是這個(gè)析構(gòu)函數(shù)只釋放數(shù)據(jù)成員所占用的內(nèi)存,。如果數(shù)據(jù)成員里面有指針,則只釋放指針?biāo)嫉膬?nèi)存,,不釋放指針指向的堆內(nèi)存,。所以在數(shù)據(jù)成員有指針的情況下,必須自定義析構(gòu)函數(shù)來釋放指針指向的堆內(nèi)存,。以免內(nèi)存泄露,。

★如果一個(gè)數(shù)據(jù)成員有指針動(dòng)態(tài)分配內(nèi)存,那么在類里面我們應(yīng)該定義拷貝構(gòu)造函數(shù),,析構(gòu)函數(shù)和重載的賦值函數(shù),。稱為三要素。要定義這三個(gè)要素的原因是為了實(shí)現(xiàn)深拷貝,。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多