自定義復(fù)制構(gòu)造函數(shù)會(huì)使編譯器不生成默認(rèn)構(gòu)造函數(shù)
默認(rèn)的構(gòu)造函數(shù)是指為所有參數(shù)都提供了默認(rèn)值的構(gòu)造函數(shù),通常是指無參的構(gòu)造函數(shù)洁墙。比如下面的類Test趁冈,它的默認(rèn)構(gòu)造函數(shù)就是Test()。
class Test
{
public:
Test(){} // default constructor
} ;
如果你沒有為你的類提供任何構(gòu)造函數(shù)铃慷,那么編譯器將自動(dòng)為你生成一個(gè)默認(rèn)的無參構(gòu)造函數(shù)。一旦你為你的類定義了構(gòu)造函數(shù)蜕该,哪怕只是一個(gè)犁柜,那么編譯器將不再生成默認(rèn)的構(gòu)造函數(shù)。
總結(jié):
c++類的中有兩個(gè)特殊的構(gòu)造函數(shù)堂淡,(1)無參構(gòu)造函數(shù)馋缅,(2)拷貝構(gòu)造函數(shù)扒腕。它們的特殊之處在于:
(1)當(dāng)類中沒有定義任何構(gòu)造函數(shù)時(shí)(包括拷貝構(gòu)造函數(shù)也屬于這個(gè)范疇),編譯器會(huì)默認(rèn)提供一個(gè)無參構(gòu)造函數(shù)且其函數(shù)體為空萤悴;
(2)當(dāng)類中沒有定義拷貝構(gòu)造函數(shù)時(shí)瘾腰,編譯器會(huì)默認(rèn)提供一個(gè)拷貝構(gòu)造函數(shù),進(jìn)行成員變量之間的拷貝覆履。(這個(gè)拷貝操作是淺拷貝)