이 코드를 좀 더 읽기 쉽도록 만드는 코드를 잘라내는 것은 이해하기 어렵습니다.파생 클래스 멤버 변수에 액세스하는 기본 클래스 포인터?
class player : public character{
public:
// ---------stuff-------
protected:
// ------stuff--------
vector <item*> inventory;
};
class item {
public:
// -----stuff------------
virtual float getHealth(){};
virtual int getDef(){return 0;};
virtual int getAttAcc(){return 0;};
virtual int getAttPow(){return 0;};
virtual ~item();
protected:
string name;
string type;
int value;
int weight;
};
class weapon : public item{
public:
weapon(int attPow, int attAcc, int inValue, int inWeight, string inType, string inName);
weapon(const weapon& cWeapon);
int getAttAcc(weapon& weapon){return attAcc;};
int getAttPow(){return attPow;};
~weapon(){};
protected:
int attAcc;
int attPow;
};
내 생각에는 attAcc 및 attPow에 액세스하기 위해 무기 (포인터가 인벤토리에 저장되어 있어야 함)가 필요할 때가 생깁니다.
내가 시도한 것 : 가상 함수를 추가하고 파생 클래스로 변경하려고했습니다.
나는 기본 클래스에서 벗어나려고했지만 인벤토리는 항목에 대한 포인터 벡터이므로 허용하지 않습니다.
원래 무기와 방어구에 2 개의 포인터가 있어야하지만 인벤토리가 작동하지 않는 항목 포인터이기 때문에.
다른 항목에 대한 수업을 빠져 나오기 때문에, 다른 항목에 대한 수업을 빠져 나왔습니다. 3 파생 된 클래스가 있기 때문에 기본 클래스에 대한 포인터가 될 인벤토리가 필요합니까?
이 https://stackoverflow.com/questions/11855018/c-inheritance-downcasting를 참조하십시오 당신은 때 알아야하고있는 당신이 어떻게 든 캐스트 할 필요가 객체. – Robert
나는 주조를보고 있었고 나는이 경우 어떻게 작동 할 것인가를 너무 확신하지 못했습니다. 내 인벤토리의 항목을 가리 키기 위해 캐스트 포인터를 사용할 수 있습니까? 인벤토리 [1]이 무기 인 경우 액세스 권한을 얻기 위해 사례 값을 사용할 수 있습니까? –
예.하지만 캐스팅 할 때 무기인지 확인해야합니다. – Robert