中構(gòu)造函數(shù)能否是私有的成員函數(shù)?
一般構(gòu)造函數(shù)不是私有或者保護(hù)成員,但構(gòu)造函數(shù)可以使私有成員函數(shù),在一些特殊的場(chǎng)合,會(huì)把構(gòu)造函數(shù)定義為私有或者保護(hù)成員。C++類的構(gòu)造函數(shù)一般不應(yīng)該是私有函數(shù),因?yàn)樗接泻瘮?shù)不能被其他類或者全局函數(shù)所使用。而創(chuàng)建C++實(shí)例需要調(diào)用構(gòu)造函數(shù)。所以如果構(gòu)造函數(shù)是私有函數(shù)的話,除了類自己的方法之外,其他類不能構(gòu)造這個(gè)類的實(shí)例。
一般來說,類做出來就是讓其他類使用的,而使用一個(gè)類必須先構(gòu)造它的實(shí)例。
所以一般情況下,構(gòu)造函數(shù)如果是私有函數(shù),其他類要使用它就很困難了。
但是,在一些特殊場(chǎng)合,比如不希望其他類能夠?qū)嵗A裔各類,這種情況下會(huì)把構(gòu)造函數(shù)定義為私有的或者保護(hù)的。
最常見的是單件,就是一個(gè)類只有一個(gè)實(shí)例,為了避免其他類創(chuàng)建多個(gè)實(shí)例,把構(gòu)造函數(shù)定義為私有的:
classA{private:staticAm_ins;public:staticA&GetInstance()
;private:A();};AA::m_ins;A&A::GetInstance(){returnm_ins;}...
.另外一種情況是,定義友元,這樣可以限制只有友元可以創(chuàng)建這個(gè)類的實(shí)例,其他類不能。