c 限制某個class所能產生物件數量的方法

2021-08-05 23:14:25 字數 487 閱讀 6219

1.產生零個或乙個物件:

將建構函式與拷貝建構函式宣告為私有成員,並宣告乙個友元函式,在友元函式中宣告乙個靜態成員,呼叫建構函式,並返回乙個靜態成員的引用。

另一種方法就是設定乙個計數器,初始化為0.在建構函式中+1,在析構函式中-1,每次保證只有乙個物件。

2.不同物件的構造狀態:

上述第二種方法在繼承關係與嵌入大物件中時就會出現漏洞。假設有乙個印表機的基類,它的派生類是乙個彩色印表機,

pinter p;     //沒有問題

colorpinter cp;//不能成功構造,因為之前已經有了一台。

c++設計規則:避免具體類繼承具體類。

解決方法:使用乙個虛的建構函式與虛的拷貝建構函式,呼叫建構函式,建構函式返回的是指向物件的指標。

3.利用計數器類來計數有多少物件

自定義乙個專門用來記錄有多少物件的模板類,當前class 繼承自該類。

摘錄自 more effective c++ 條款27

M26 限制某個class所能產生的物件數量

1 每當產生乙個物件,必定呼叫構造方法。因此,禁止產生物件的做法就是,將所有的構造方法宣告為private。2 只有在類的內部才可以訪問private成員,有兩層含義 在類的內部可以訪問this的private成員,同時可以訪問同類物件的private成員。3 將構造方法宣告為private,只是限...

C 限制某個類所能產生的物件數量

或者系統只提供16個可分發出去的檔案描述符,如何確保檔案描述符物件存在的數目不能超過16個。在具體的應用過程中,我們可能需要限制某個類所產生的物件數量。下面我們先從簡單的問題的開始。1.如何允許建立零個物件?例項化乙個物件時,將呼叫乙個建構函式,因而阻止建立某個類的物件,最容易的方法就是把該類的建構...

C 中 對Class進行排序的方法

在製作的一些排行榜時,總是會用到排序,我們往往會建立乙個類,裡面會包含名字,分數等等的屬性。然後我們會對這個新建的類進行排序,到這一步的時候我往往會忘記具體排序怎麼去寫。這裡我做一下記錄,列出幾種比較常見的排序方法。首先定義乙個list類,這個類裡面包含了name和total兩個屬性變數,下面就是針...