多态性c ++,当对一个对象进行更改时,所有对象都会发生变化

时间:2012-02-28 21:25:03

标签: c++ polymorphism

我是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;
        }
}

1 个答案:

答案 0 :(得分:4)

if(j=3)
你可能想要

if(j==3)

表达式j=3将始终产生'true',您将始终执行:j=0;,稍后您将从数组中获取相同的元素。 [总是每个数组中的第一个元素]。

我不确定它是否解决了问题 - 如果没有更多代码,它会有点困难 - 但这很可能是一个问题。