我有一个游戏,每转一圈就会创建一个新的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;
}
答案 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
}
这将修改实际对象,而不仅仅是副本。