【发布时间】:2013-09-03 21:24:52
【问题描述】:
我有一个角色类和两个子类战士和巫师。
class Character {
protected:
std::string m_name;
Weapon m_weapon;
int m_life;
public:
virtual void hit(Character& cible);
};
class Warrior : public Character{
public:
Warrior(std::string name);
};
class Wizard : public Character{
public:
Wizard(std::string name);
};
我还有一个武器类。
class Weapon {
protected:
std::string m_name;
int m_damage;
public:
Weapon();
Weapon(std::string name,int damage, int reloading_time);
int get_damage() ;
};
命中函数为:
void Character::hit(Character &cible){
cible.dec_life(m_weapon.get_damage());
}
而 get_damage 很简单:
int Weapon::get_damage() {
return m_damage;
}
问题是 m_weapon.get_damage() 在 hit 函数中为每个角色(战士或法师)返回值 -2,即使其武器的伤害是 10 或 15。
主要:
int main()
{
string character_name;
cout << "Warrior 1 : ";
cin >> character_name;
Warrior character_1(character_name);
cout << endl << "Wizard 2 : ";
cin >> character_name;
Wizard character_2(character_name);
character_1.hit(character_2);
}
武器构造器:
Weapon::Weapon(std::string name,int damage, int reloading_time){
m_name=name;
m_damage=damage;
}
战士构造函数:
Warrior::Warrior(string name){
m_name=name;
m_life=100;
Weapon m_weapon("Rusted Axe",5,0);
cout << endl << "Warrior " << m_name <<" created." <<endl;
}
向导构造函数:
Wizard::Wizard(string name){
m_name=name;
m_mana=100;
m_life=100;
Weapon m_weapon("Apprentice Wand",10,0);
cout << endl <<"Wizard " << m_name <<" created."<<endl;
}
知道我哪里弄错了吗?
【问题讨论】:
-
您是否将 m_damage 设置为 -2 以外的值?
-
Weapon 构造函数是什么样的?什么时候在角色上设置它?
-
你能发布你的主要功能吗?
-
@user2744550:这段代码构造了一个本地对象
m_weapon,它与类成员m_weapon无关。你不能这样做。