2016-09-23 4 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がtrueに等しい場合、私のリソース値(リソースに格納されている)のいずれも、それは最高額だより大きくないことをことを確認してくださいしたいと思います。 maxOnが変更または設定されたときにいつでもメソッドを実行できる方法はありますか?

+2

「maxOn」を設定する方法がないのはなぜですか?あなたはその呼び出しにあなたのチェックコードを入れることができます。 –

+1

boolの代わりにmaxOn独自のクラスインスタンスを作成し、そのクラスの代入演算子をオーバーライドすることができます。本当にそこに行きたくはありません。 –

+0

私はそれを設定する方法を作ることができました。フィールドに適しているように思えました。標準的な練習から離れてその方法なら、私はちょうど方法を作ることができます。 –

答えて

1

短い答えは:実質的にはありません。 maxOnをプライベートなクラスメンバにして、独自のgetterメソッドとsetterメソッドを提供する必要があります。

pointerToResourceBin->maxOn=true; 

は、クラスメソッドを実行します。

「実質的に」修飾子の理由は、それが形の声明になりますカードの家を構築することが可能であるということです。 は通常のboolではありませんが、operator=operator bool()のカスタムクラスは、boolのように動作しますが、operator=はフラグを更新し、多くのアプローチを使用してメソッドを実行します親クラスを使用して、必要な制約を検証します。

これは可能ですが、かなりの作業です。しかし、しないでください。それは醜いです。 maxOnをゲッターとセッターに置き換えてください。

関連する問題