▌構(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ì)象,。 例: ☆ ▲拷貝構(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);】 例: 如果沒有定義拷貝構(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)深拷貝,。 |
|