2012-02-28 7 views
0

C++では多態性が初めてです。私のコンストラクタでは、いくつかのオブジェクトをとり、クリーチャーのコレクションを作成します。あるオブジェクトを変更すると、同じオブジェクトがすべて変更されます。なぜこれが起こっているのか分かりません。多型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

クラス定義を表示 – Sid

+0

コードに 'std :: unique_ptr'が不十分です。 –

答えて

4
if(j=3) 

あなたはおそらく望んでいた理由は分からないのです

if(j==3) 

j=3は常に 'true'を返します。常にあなたは:j=0;を実行し、後で同じ要素を配列から取得します。 [常に各配列の最初の要素]。

私はそれが問題を解決しているかどうかはわかりません - それ以上のコードなしでは少し難しいですが、おそらく問題です。

+0

ありがとう、それは問題でした – Aaron

+0

@Aaron:警告でコンパイルすることを学ぶ(例: '-Wall')、無視しないでください。この場合、ほとんどのコンパイラは警告を出します。これはGCCとClangの場合です。 – netcoder

関連する問題