This ensures that methods of inherited classes use the correct name.
, m_energy(energy)
, m_attack(attack)
{
- std::cout << "ClapTrap " << m_name << " has spawned.\n";
+ std::cout << "ClapTrap " << getName() << " has spawned.\n";
}
ClapTrap::ClapTrap(std::string name)
, m_energy(start_energy)
, m_attack(start_attack)
{
- std::cout << "ClapTrap " << m_name << " has spawned.\n";
+ std::cout << "ClapTrap " << getName() << " has spawned.\n";
}
ClapTrap::~ClapTrap()
{
- std::cout << "ClapTrap " << m_name << " has despawned.\n";
+ std::cout << "ClapTrap " << getName() << " has despawned.\n";
}
void ClapTrap::attack(const std::string &target)
{
if (m_hp == 0)
- std::cout << "ClapTrap " << m_name
+ std::cout << "ClapTrap " << getName()
<< " is dead, hence cannot attack.\n";
else if (m_energy == 0)
- std::cout << "ClapTrap " << m_name
+ std::cout << "ClapTrap " << getName()
<< " does not have enough energy to attack.\n";
else
{
- std::cout << "ClapTrap " << m_name
+ std::cout << "ClapTrap " << getName()
<< " attacks " << target << " and deals " << m_attack << " damage.\n";
--m_energy;
}
void ClapTrap::takeDamage(unsigned int amount)
{
if (m_hp == 0)
- std::cout << m_name <<
- " is already dead and cannot be damaged further.\n";
+ std::cout << getName()
+ << " is already dead and cannot be damaged further.\n";
else if (amount >= m_hp)
{
- std::cout << m_name
+ std::cout << getName()
<< " takes " << amount << " damage and dies\n";
m_hp = 0;
}
else
{
- std::cout << m_name
+ std::cout << getName()
<< " takes " << amount << " damage.\n";
m_hp -= amount;
}
void ClapTrap::beRepaired(unsigned int amount)
{
if (m_hp == 0)
- std::cout << m_name
+ std::cout << getName()
<< " is dead, hence cannot repair itself.\n";
else if (m_energy == 0)
- std::cout << m_name
+ std::cout << getName()
<< " does not have enough energy to repair itself.\n";
else
{
- std::cout << m_name
+ std::cout << getName()
<< " repairs iself for " << amount << " hit points.\n";
m_hp += amount;
}
}
+
+std::string ClapTrap::getName()
+{
+ return (m_name);
+}
void attack(const std::string &target);
void takeDamage(unsigned int amount);
void beRepaired(unsigned int amount);
+
+ virtual std::string getName();
};
#endif // CLAPTRAP_H
std::cout << "My DiamondTrap name is " << m_name
<< " while my ClapTrap name is " << ClapTrap::m_name << ".\n";
}
+
+std::string DiamondTrap::getName()
+{
+ return (m_name);
+}
~DiamondTrap();
using ScavTrap::attack;
- void whoAmI();
+
+ void whoAmI();
+ std::string getName();
};
#endif // DIAMONDTRAP_H
FragTrap::FragTrap(std::string name)
: ClapTrap(name, start_hp, start_energy, start_attack)
{
- std::cout << "FragTrap " << m_name << " has spawned.\n";
+ std::cout << "FragTrap " << getName() << " has spawned.\n";
}
FragTrap::~FragTrap()
{
- std::cout << "FragTrap " << m_name << " has despawned.\n";
+ std::cout << "FragTrap " << getName() << " has despawned.\n";
}
void FragTrap::attack(const std::string &target)
{
if (m_hp == 0)
- std::cout << "FragTrap " << m_name
+ std::cout << "FragTrap " << getName()
<< " is dead, hence cannot attack.\n";
else if (m_energy == 0)
- std::cout << "FragTrap " << m_name
+ std::cout << "FragTrap " << getName()
<< " does not have enough energy to attack.\n";
else
{
- std::cout << "FragTrap " << m_name
+ std::cout << "FragTrap " << getName()
<< " attacks " << target << " and deals " << m_attack << " damage.\n";
--m_energy;
}
void FragTrap::highFivesGuys()
{
if (m_hp == 0)
- std::cout << m_name << " is dead and cannot request high fives.\n";
+ std::cout << getName() << " is dead and cannot request high fives.\n";
else
- std::cout << m_name << " raises hand and shouts, \"Up top!\"\n";
+ std::cout << getName() << " raises hand and shouts, \"Up top!\"\n";
}
: ClapTrap(name, start_hp, start_energy, start_attack)
, m_is_guarding(0)
{
- std::cout << "ScavTrap " << m_name << " has spawned.\n";
+ std::cout << "ScavTrap " << getName() << " has spawned.\n";
}
ScavTrap::~ScavTrap()
{
- std::cout << "ScavTrap " << m_name << " has despawned.\n";
+ std::cout << "ScavTrap " << getName() << " has despawned.\n";
}
void ScavTrap::attack(const std::string &target)
{
if (m_hp == 0)
- std::cout << "ScavTrap " << m_name
+ std::cout << "ScavTrap " << getName()
<< " is dead, hence cannot attack.\n";
else if (m_energy == 0)
- std::cout << "ScavTrap " << m_name
+ std::cout << "ScavTrap " << getName()
<< " does not have enough energy to attack.\n";
else
{
- std::cout << "ScavTrap " << m_name
+ std::cout << "ScavTrap " << getName()
<< " attacks " << target << " and deals " << m_attack << " damage.\n";
--m_energy;
}
void ScavTrap::guardGate()
{
if (m_hp == 0)
- std::cout << m_name << " is dead and cannot guard the gate.\n";
+ std::cout << getName() << " is dead and cannot guard the gate.\n";
else if (m_is_guarding == 0)
{
- std::cout << m_name << " is now guarding the gate.\n";
+ std::cout << getName() << " is now guarding the gate.\n";
m_is_guarding = 1;
}
else
- std::cout << m_name << " is already guarding the gate.\n";
+ std::cout << getName() << " is already guarding the gate.\n";
}