2016-09-23 22 views
0

我有一個名爲ResourceBin的類。僞裝成字段的類方法

class ResourceBin 
{ 
    public: 
     ResourceBin(); 
     virtual ~ResourceBin(); 
     int getResource(Resources resource) const; 
     void setResource(Resources resource, int amount); 
     int addResource(Resources resource, int amount); 
     unsigned int getMax(Resources resource) const; 
     void setMax(Resources resource, unsigned int amount); 
     bool simulateAddResource(Resources resource, int amount) const; 
     bool maxOn = true; 
     ResourceBin operator+(const ResourceBin& bin); 
    protected: 
     int resources[2]; 
     unsigned int maxamount[2]; 
     unsigned int getIndex(Resources resource) const; 
    private: 
}; 

typedef ResourceBin ResourceList; 

我想確保,如果MAXON等於真的沒有我的資源值(存儲資源)大於它的最大金額。有沒有什麼辦法可以讓maxOn隨時更改或設置?

+2

爲什麼你不能只有一個方法來設置'maxOn'?你可以把你的檢查代碼放在那個調用中。 –

+1

你可以使maxOn成爲你自己的類實例而不是bool,並且可以重寫該類的賦值操作符......你真的不想去那裏。 –

+0

我可以設置一個方法。只是好像它會更適合於一個領域。如果遠離標準實踐,我可以制定一個方法。 –

回答

1

簡短的回答是:幾乎沒有。您必須使maxOn成爲私有類成員,並提供自己的getter和setter方法。

的原因「幾乎」預選賽是,它可以建立紙牌做的房子,這將導致形式的語句:

pointerToResourceBin->maxOn=true; 

執行一個類的方法。 maxOn不是普通的bool,而是一個自定義類,其中operator=operator bool(),使其具有類似於bool的值,但operator=會更新該標誌,並且使用多種方法在其中執行方法父類來驗證所需的約束。

這是可能的,這是相當多的工作。但不要這樣做。它很醜。只需用一個吸氣器和一個吸氣器代替maxOn即可。