我是c ++中多态的新手。在我的构造函数中,我采用了几个对象并创建了一组生物。当我对一个对象进行更改时,它会更改所有相同的对象。我不确定为什么会这样。
在我的构造函数中。
lmaxSize=9;
lmiddleSize=6;
lsmallSize=3;
int j=0;
for(int i=0;i<lmaxSize;i++)
{
if(j=3)
{
j=0;
}
if(i<lsmallSize)
{
creature[i]=&dizzy[j];
}
else if(i>=lsmallSize && i<lmiddleSize)
{
creature[i]= &pred[j];
}
else
{
creature[i]=&agile[j];
}
j++;
}
当我对pred对象进行更改时,所有pred对象都会更改。例如,当我使用消耗能量时,它会改变所有pred对象的能量。不知道为什么
void collections::consumeEnergy()
{
int creatureNum=0;
cin>>creatureNum;
creature[creatureNum]->consumeEnergyUnits();
}
predatorCreature
void predatorCreature::consumeEnergyUnits()
{
if (_consume < 10)
{
_energyUnits -= 2;
_energyLevel += 1;
}
else if (_consume <= 30)
{
_energyUnits -= 5;
_energyLevel += 2;
}
else
{
_energyUnits -= 7;
_energyLevel += 4;
}
}
agileCreature
void agileCreature::consumeEnergyUnits()
{
if (_consume < 10)
{
_energyUnits -= 2;
_energyLevel += 1;
}
else if (_consume <= 30)
{
_energyUnits -= 5;
_energyLevel += 2;
}
else
{
_energyUnits -= 7;
_energyLevel += 4;
}
}
答案 0 :(得分:4)
if(j=3)
你可能想要
if(j==3)
表达式j=3
将始终产生'true',您将始终执行:j=0;
,稍后您将从数组中获取相同的元素。 [总是每个数组中的第一个元素]。
我不确定它是否解决了问题 - 如果没有更多代码,它会有点困难 - 但这很可能是一个问题。