Ahoj, mám problém s alokací podtříd s virtual metodami. Vytvořila jsem základní třídu Player a k ní 4 podtřídy (jednou z nich je PClovek).
class Player{
protected:
int level;
int hp;
char * name;
char * povolani;
char pohlavi;
int sila;
int intel;
int obrat;
int sarm;
Bag * batoh;
Suit * oblek;
public:
int actual;
Player(){
};
Player(char * jmeno, char p){
level = 1;
hp = 50;
actual = 50;
int delka = strlen(jmeno);
name = new char[delka + 1];
strcpy(name, jmeno);
pohlavi = p;
sila = 5;
intel = 5;
obrat = 5;
sarm = 5;
batoh = new Bag;
oblek = new Suit;
Vec mec("kyj zacatecnika", 1, 0, 1, 0, 1);
Vec boty("platene botky", 0, 0, 1, 0, 2);
oblek->suitUp(mec);
oblek->suitUp(boty);
}
Player(char * jmeno, char p, int lvl, int hp2, int s, int o, int i,
int sa){
level = lvl;
hp = hp2;
actual = hp2;
int delka = strlen(jmeno);
name = new char[delka + 1];
strcpy(name, jmeno);
pohlavi = p;
sila = s;
intel = i;
obrat = o;
sarm = sa;
batoh = new Bag;
oblek = new Suit;
Vec mec("kyj zacatecnika", 1, 0, 1, 0, 1);
Vec boty("platene botky", 0, 0, 1, 0, 2);
oblek->suitUp(mec);
oblek->suitUp(boty);
}
Player(const Player & a){
level = a.level;
hp = a.hp;
actual = a.actual;
//int delka = strlen(a.name);
strcpy(name, a.name);
strcpy(povolani, a.povolani);
pohlavi = a.pohlavi;
sila = a.sila;
intel = a.intel;
obrat = a.obrat;
sarm = a.sarm;
batoh = (a.batoh);
oblek = (a.oblek);
}
virtual ~Player(){
delete [] name;
delete [] povolani;
delete batoh;
delete oblek;
}
/*... několik běžných metod, bez virtual, které nepotřebuji v závislosti na podtřídě měnit */
virtual string Type() const = 0;
virtual void writeIn(const Player & a, char * kam) const = 0;
};
//-------------------------------------------------------------
class PClovek: public Player::Player{
private:
char * rasa;
public:
PClovek(char * jmeno, char p): Player(jmeno, p){
rasa = new char[7];
strcpy(rasa, "Clovek");
sila = 5;
intel = 5;
obrat = 6;
sarm = 4;
}
PClovek(char * jmeno, char p, int lvl, int hp2, int s, int o, int i, int sa): Player(jmeno, p, lvl, hp2, s, o, i, sa){
rasa = new char[7];
strcpy(rasa, "Clovek");
}
PClovek(const PClovek & a): Player(a){
strcpy(rasa, a.rasa);
}
virtual ~PClovek(){
delete [] rasa;
}
virtual string Type() const{
return "Clovek";
}
virtual void writeIn(const PClovek & a, const char * kam) const{
//implementace
}
};
// + další 3 stejně vypadající podtřídy
int main(){
Player * a = new PClovek(...);
}
Pokud chci -> Player * a = new PClovek(char *, char); <- napíše chybu "cannot allocate an object of abstract type because the following virtual functions are pure". Kde je chyba?
Děkuji