我正在使用C ++创建一个生态系统,我的ANIMAL
上的每个 playing_field
将在年底grow_older()
。
class ANIMAL
{
private:
int age;
public:
ANIMAL()
{
age=0;
}
static void grow_older(){ age++; }
};
我知道static methods can only use static data,但是有没有优雅的方式来获得与ANIMAL.grow_older();
类似的东西?我可以遍历我的playing_field
并在每只动物身上调用grow_older();
,但我希望有一些我不知道的概念可以避免迭代ANIMAL
的每个实例明确。
答案 0 :(得分:1)
没有一种优雅的方法可以同时从多个对象中增加数据成员的值,因此您的选项似乎要么只有一个静态age
(我认为这对您的用例无效),一次一个地增加所有对象的age
(通过迭代它们所在的任何容器来找到每个对象),或者完全采用不同的解决方案。
一种可能的替代解决方案是根本不将age
存储为数据成员,而是将time_of_birth
存储为数据成员,并将current_time
跟踪为class ANIMAL
{
private:
int time_of_birth;
static int current_time;
public:
ANIMAL()
{
time_of_birth=current_time;
}
static void grow_older(){ current_time++; }
int age() { return current_time - time_of_birth; }
};
int ANIMAL::current_time = 0; /* defined in a source, not header file */
静态数据成员。你的课程看起来像是:
var select = '<input type="checkbox" class="chkSelect" />';
var waive = '';
var ndex = tblOutstandingFees.fnAddData([select, waive, item.Year,
item.Batch, item.FeeType, parseFloat(item.Amount).toFixed(2),
(item.IsNSF.toString().toLowerCase() == 'true' ? 'Yes' : 'No')]);
var nTr = tblOutstandingFees.fnSettings().aoData[ndex[0]].nTr;
nTr.className = "row " + nTr.className;
如果每次你必须增加年龄,你还需要检查年龄(例如,看动物现在必须死了),可能没有节省,因为你需要反复通过你的动物园。另一方面,如果您不需要经常检查年龄(或更多),而不是需要增加年龄,这种方法应该会更好,因为工作量减少。