저는 다형성을 배우는 프로그래밍 할당 작업을하고 있습니다. 우리는 부모 클래스와 하위 클래스를 사용하여 간단한 전투 게임을 만들고 있습니다.다른 하위 클래스의 변수에 액세스하는 방법을 모르겠습니다.
기본 구조는 이것이다 : 닌자를 초기화하여, 그래서 본질적으로
class Parent
{
protected:
int life;
};
class Ninja : public Parent
{
private:
Ninja (int x);
void ninjaAttack();
};
Ninja::Ninja (int x) : Parent()
{
life = x;
}
Class Monster : public Parent
{
private:
Monster();
void monsterLife();
};
Monster::Monster() : Parent()
{
}
void Ninja::ninjaAttack()
{
life = (life-1);
}
void Monster::monsterAttack()
{
cout << life << endl;
}
int main()
{
Ninja n1 (4);
Monster m2;
Parent * p1 = &n1;
Parent * p2 = &m1;
p1 -> ninjaAttack();
p2 -> monsterAttack();
return 0;
}
을, 난 지금, 부모 :: 생활 = 4을해야 하는가? 그리고 나서 닌자 공격 (ninjaAttack)을 실행하여 '생명력'을 3으로 낮 춥니 다. 몬스터 공격을 부름으로써 3을 출력해야합니다.
예외 : 작동하지 않는 경우. 매번 0을 출력합니다. 내가 도대체 뭘 잘못하고있는 겁니까? Parent 클래스의 변수를 Child 클래스의 값으로 설정하면 Parent 클래스의 변수를 실제로 어떻게 변경할 수 있습니까? 이렇게 변경된 새 변수는 Child 클래스에서 액세스 할 수 있습니까?
감사합니다.
[mcve]를 작성하십시오. 관련없는 여러 가지 이유로 코드가 컴파일되지 않아 실제 문제를 찾는 것이 매우 어렵습니다. – nwp
예제를 컴파일하여 시작하는 것이 좋습니다. 컴파일러는 여러분의 친구이며 잘못하고있는 것에 대한 통찰력을 줄 것입니다. 힌트 : ninjaAttack 및 monsterAttack은 Parent 클래스의 메서드가 아니므로 Parent 클래스에 대한 포인터에서 호출 할 수 없습니다. 질문에 - 이제 ninjaAttack을 호출하면 메서드를 호출 한 닌자 개체의 수명이 단축됩니다.이 메서드는 다른 개체의 수명 값을 변경하지 않습니다 – Amnon
주석 주셔서 감사합니다. – FKAjasmine