2016-09-23 43 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即可。