亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在類中將構造函數私有化有什么用?

在類中將構造函數私有化有什么用?

為什么要在類中將構造函數設為私有?因為我們總是需要構造函數公開。
查看完整描述

3 回答

?
幕布斯6054654

TA貢獻1876條經驗 獲得超7個贊


您可能需要私有構造函數的一些原因:

  1. 只能從類本身內部的靜態工廠方法訪問構造函數。Singleton也可以屬于此類別。

  2. 一個實用程序類,僅包含靜態方法。


查看完整回答
反對 回復 2019-12-11
?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

通過提供私有構造函數,可以防止在此類之外的任何地方創建類實例。提供這種構造函數有幾種用例。


答:您的類實例是在static方法中創建的。static然后將該方法聲明為public。


class MyClass()

{

private:

  MyClass() { }


public:

  static MyClass * CreateInstance() { return new MyClass(); }

};

B.你的課是單身。這意味著程序中最多只能有一個類實例。


class MyClass()

{

private:

  MyClass() { }


public:

  MyClass & Instance()

  {

    static MyClass * aGlobalInst = new MyClass();

    return *aGlobalInst;

  }

};

C.(僅適用于即將到來的C ++ 0x標準)您有幾個構造函數。其中一些被宣布public,另一些被宣布private。為了減小代碼大小,公共構造函數會“調用”私有構造函數,這些私有構造函數依次完成所有工作。public因此,您的構造函數稱為委托構造函數:


class MyClass

{

public:

  MyClass() : MyClass(2010, 1, 1) { }


private:

  MyClass(int theYear, int theMonth, int theDay) { /* do real work */ }

};

D.您想限制對象復制(例如,由于使用共享資源):


class MyClass

{

  SharedResource * myResource;


private:

  MyClass(const MyClass & theOriginal) { }

};

E.您的課程是實用程序課程。也就是說,它僅包含static成員。在這種情況下,程序中永遠都不能創建對象實例。



查看完整回答
反對 回復 2019-12-11
?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

留下一個“后門”,該后門允許另一個朋友類/函數以用戶禁止的方式構造對象。我想到的一個例子是構造迭代器(C ++)的容器:


Iterator Container::begin() { return Iterator(this->beginPtr_); }

// Iterator(pointer_type p) constructor is private,

//     and Container is a friend of Iterator.



查看完整回答
反對 回復 2019-12-11
  • 3 回答
  • 0 關注
  • 941 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號