From: Lukas Jiriste Date: Thu, 24 Oct 2024 10:37:11 +0000 (+0200) Subject: Replace m_name with call to virtual getName X-Git-Url: https://git.ljiriste.work/?a=commitdiff_plain;h=80f1f39c2a548d456961da5962744194c7d27929;p=42%2FCPP_Module_03 Replace m_name with call to virtual getName This ensures that methods of inherited classes use the correct name. --- diff --git a/ex03/ClapTrap.cpp b/ex03/ClapTrap.cpp index 5f22533..9288cbd 100644 --- a/ex03/ClapTrap.cpp +++ b/ex03/ClapTrap.cpp @@ -8,7 +8,7 @@ ClapTrap::ClapTrap(std::string name, int hp, int energy, int attack) , 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) @@ -17,25 +17,25 @@ 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; } @@ -44,17 +44,17 @@ void ClapTrap::attack(const std::string &target) 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; } @@ -63,15 +63,20 @@ void ClapTrap::takeDamage(unsigned int 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); +} diff --git a/ex03/ClapTrap.h b/ex03/ClapTrap.h index 5770a77..3caa700 100644 --- a/ex03/ClapTrap.h +++ b/ex03/ClapTrap.h @@ -30,6 +30,8 @@ class ClapTrap void attack(const std::string &target); void takeDamage(unsigned int amount); void beRepaired(unsigned int amount); + + virtual std::string getName(); }; #endif // CLAPTRAP_H diff --git a/ex03/DiamondTrap.cpp b/ex03/DiamondTrap.cpp index 434779c..5bef046 100644 --- a/ex03/DiamondTrap.cpp +++ b/ex03/DiamondTrap.cpp @@ -22,3 +22,8 @@ void DiamondTrap::whoAmI() std::cout << "My DiamondTrap name is " << m_name << " while my ClapTrap name is " << ClapTrap::m_name << ".\n"; } + +std::string DiamondTrap::getName() +{ + return (m_name); +} diff --git a/ex03/DiamondTrap.h b/ex03/DiamondTrap.h index 1e497a0..49130e8 100644 --- a/ex03/DiamondTrap.h +++ b/ex03/DiamondTrap.h @@ -20,7 +20,9 @@ class DiamondTrap: public FragTrap, public ScavTrap ~DiamondTrap(); using ScavTrap::attack; - void whoAmI(); + + void whoAmI(); + std::string getName(); }; #endif // DIAMONDTRAP_H diff --git a/ex03/FragTrap.cpp b/ex03/FragTrap.cpp index c0e422c..f99f71a 100644 --- a/ex03/FragTrap.cpp +++ b/ex03/FragTrap.cpp @@ -6,25 +6,25 @@ 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; } @@ -33,7 +33,7 @@ void FragTrap::attack(const std::string &target) 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"; } diff --git a/ex03/ScavTrap.cpp b/ex03/ScavTrap.cpp index 0b3065d..0cf02a0 100644 --- a/ex03/ScavTrap.cpp +++ b/ex03/ScavTrap.cpp @@ -7,25 +7,25 @@ ScavTrap::ScavTrap(std::string name) : 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; } @@ -34,12 +34,12 @@ void ScavTrap::attack(const std::string &target) 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"; }