在用C ++构造对象后,从对象中增加一个int

时间:2016-06-21 14:23:48

标签: c++ class int

我有一个游戏,每转一圈就会创建一个新的Bunny对象。每个兔子都有一个年龄,我想要在游戏中每个物体的每个转弯处增加年龄。
我为类增加了年龄的方法,但它似乎只增加了一次。
我该如何进行?

class Bunny 
{
private:
    std::string sex, color, name;
    int age;

public:
    void agePlusOne(void);

    Bunny();
    ~Bunny();
};

void Bunny::agePlusOne()
{
    age += 1; // Or age++;
}

int main() 
{
    int the_time;

    clock_t startTime = clock();   //Start timer

    clock_t testTime;
    clock_t timePassed;
    double secondsPassed;

    std::vector<Bunny> bunnies;   //Bunny objects container

    while (true) 
    {
        testTime = clock();
        timePassed = startTime - testTime;
        secondsPassed = timePassed / (double)CLOCKS_PER_SEC;

        the_time = (int)secondsPassed * -1;

        if (the_time % 2 == 0)   //This is what happens each turn
        {

            for (auto e : bunnies) 
            {
                e.agePlusOne();   //All bunnies age one year
            }

            bunnies.push_back(Bunny());   //Adds bunny object to vector
        }
    }

    //End of program
    system("pause");
    return 0;
}

1 个答案:

答案 0 :(得分:1)

这里的主要问题是你在最里面的for循环中处理你的兔子矢量的副本。当你写:

for (auto e : bunnies)
{
    // More code here
}

e只是该位置矢量中任何元素的副本,而不是原始元素本身。

如果要修改向量中的元素,请通过 reference 访问它们并相应地调用它们的mutator。例如:

for (auto & e : bunnies)
//        ^
// Note the ampersand above.
{
    int tempAge = e.get_age();
    e.agePlusOne(); // Now this will change the internal state
                    // of `age` for this bunny.
    // More code
}

这将修改实际对象,而不仅仅是副本。