2012-02-28 4 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

관련 문제