通过静态函数增加非静态变量

时间:2016-04-14 01:01:07

标签: c++ oop static increment

我正在使用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的每个实例明确。

1 个答案:

答案 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;

如果每次你必须增加年龄,你还需要检查年龄(例如,看动物现在必须死了),可能没有节省,因为你需要反复通过你的动物园。另一方面,如果您不需要经常检查年龄(或更多),而不是需要增加年龄,这种方法应该会更好,因为工作量减少。

相关问题