Posto sam procitao da nesto nije u redu kod dizajna ako se ovo priimenjuje u nekom if() ili switch() sto se kod mene desava...
// Unit.h
class Unit
{
private:
int myStrength;
House myOwner;
bool myRetreat;
public:
enum unitType {Footmen, Knight};
Unit();
virtual ~Unit();
virtual unitType getType() = 0;
virtual void setStrength(int strength);
virtual void setOwner(House owner);
virtual int getStrength();
virtual House getOwner();
virtual void rest();
virtual void retreat();
virtual bool getRetreat();
};
//Footmen.h
class Knight : public Unit
{
public:
Knight();
virtual ~Knight();
Unit::unitType getType();
};
//Knight.h
class Footmen : public Unit
{
public:
Footmen();
virtual ~Footmen();
Unit::unitType getType();
};
E sada imam tu dva problema, prvi je sto tip ne bi trebao da se proverava ovako u if prilikom npr popunjavanja niza jedinica, a ja ne znam kako to da izbegnem.
addUnit(Unit *unit)
{
if(unit->getType() == Unit::Footmen) myUnits[x] = new Footmen();
}
A drugi je sto npr ako se desi da meni treba posle neka treca jedinica koja je izvedena iz klase Unit onda moram da dodajem u enum jos i npr Ship, tj moram da menjam baznu klasu, sto nije takodje dobar stil.
Kako ovo da resim?