diff --git a/d03/ex01/ClapTrap.cpp b/d03/ex01/ClapTrap.cpp index 5c7246d..fb8289c 100644 --- a/d03/ex01/ClapTrap.cpp +++ b/d03/ex01/ClapTrap.cpp @@ -12,7 +12,7 @@ int ClapTrap::_totalNumber = 0; ClapTrap::ClapTrap( void ) { - std::cout << "claptrap created without name\n"; + std::cout << "claptrap default creation without name\n"; return; } @@ -30,8 +30,8 @@ ClapTrap::~ClapTrap( void ) { */ ClapTrap::ClapTrap( ClapTrap const & src ) { - std::cout << _class << " " << _name << " copied\n"; *this = src; + std::cout << _class << " " << _name << " copied\n"; return; } @@ -46,6 +46,9 @@ ClapTrap & ClapTrap::operator=( ClapTrap const & rhs ) { this->_hit = rhs.getHit(); this->_energy = rhs.getEnergy(); this->_attack = rhs.getAttack(); + this->_class = rhs.getClass(); + this->_name = rhs.getName(); + this->_number = rhs.getNumber(); } std::cout << _class << " " << _name << " assigned\n"; @@ -65,9 +68,9 @@ ClapTrap::ClapTrap( std::string name ) : _name(name) { _hit = 10; _energy = 10; _attack = 1; - _number = _getNumber(); + _number = getNumber(); - std::cout << _class << " " << _name << " created with number " << _number << "\n"; + std::cout << _class << " " << _name << " named creation with number " << _number << "\n"; return; } @@ -76,10 +79,11 @@ ClapTrap::ClapTrap( std::string name ) : _name(name) { */ std::string ClapTrap::getName() const {return _name;} +std::string ClapTrap::getClass() const {return _class;} int ClapTrap::getHit() const {return _hit;} int ClapTrap::getEnergy() const {return _energy;} int ClapTrap::getAttack() const {return _attack;} -int ClapTrap::_getNumber() {return ClapTrap::_totalNumber;} +int ClapTrap::getNumber() const {return ClapTrap::_totalNumber;} void ClapTrap::_increaseNumber() {ClapTrap::_totalNumber++;} /* diff --git a/d03/ex01/ClapTrap.hpp b/d03/ex01/ClapTrap.hpp index d1d3259..354a24f 100644 --- a/d03/ex01/ClapTrap.hpp +++ b/d03/ex01/ClapTrap.hpp @@ -21,26 +21,27 @@ public: void beRepaired(unsigned int amount); std::string getName() const; + std::string getClass() const; int getHit() const; int getEnergy() const; int getAttack() const; + int getNumber() const; protected: - std::string const _name; + std::string _name; std::string _class; int _hit; int _energy; int _attack; int _number; - int _getNumber(); void _increaseNumber(); -private: - ClapTrap( void ); // default/parametric constructor +private: + static int _totalNumber; }; diff --git a/d03/ex01/ScavTrap.cpp b/d03/ex01/ScavTrap.cpp index df8bc14..bbeff9b 100644 --- a/d03/ex01/ScavTrap.cpp +++ b/d03/ex01/ScavTrap.cpp @@ -1,14 +1,23 @@ #include "ScavTrap.hpp" +/* + * assign values for default or secondary constructors + */ + +void ScavTrap::assignValues( ScavTrap & src ) { + src._class = "ScavTrap"; + src._hit = 100; + src._energy = 50; + src._attack = 20; +} + +/* + * parameters constructor + */ + ScavTrap::ScavTrap( std::string name ) : ClapTrap(name) { - - _class = "ScavTrap"; - _hit = 100; - _energy = 50; - _attack = 20; - - std::cout << _class << " " << ScavTrap::_name << " created with number " << _number << "\n"; - + assignValues(*this); + std::cout << _class << " " << _name << " named creation with number " << _number << "\n"; return; } @@ -17,7 +26,7 @@ ScavTrap::ScavTrap( std::string name ) : ClapTrap(name) { */ ScavTrap::~ScavTrap( void ) { - std::cout << _class << " " << ScavTrap::_name << " destructed\n"; + std::cout << _class << " " << _name << " destructed\n"; return; } @@ -26,5 +35,5 @@ ScavTrap::~ScavTrap( void ) { */ void ScavTrap::guardGate() { - std::cout << _class << " " << ScavTrap::_name << " entered special mode Gate Keeper\n"; + std::cout << _class << " " << _name << " entered special mode Gate Keeper\n"; } diff --git a/d03/ex01/ScavTrap.hpp b/d03/ex01/ScavTrap.hpp index 9618d2b..bcf2198 100644 --- a/d03/ex01/ScavTrap.hpp +++ b/d03/ex01/ScavTrap.hpp @@ -9,11 +9,15 @@ class ScavTrap : public ClapTrap { public: - ScavTrap(std::string name); ~ScavTrap(); + ScavTrap(std::string name); void guardGate(); +private: + + void assignValues( ScavTrap & src); + }; #endif diff --git a/d03/ex01/main.cpp b/d03/ex01/main.cpp index 95451d7..ce39b00 100644 --- a/d03/ex01/main.cpp +++ b/d03/ex01/main.cpp @@ -49,7 +49,17 @@ int main() { ClapTrap robot1("robot1"); ScavTrap robot2("robot2"); ScavTrap robot3("robot3"); - ClapTrap robot4("robot4"); + + ScavTrap robotmp1("robot4"); + ClapTrap robot4(robotmp1); // PBM : it says it's a ScavTrap but it has no guardGate()... + //robot4.guardGate(); + + ScavTrap robotmp2("robot5"); + ScavTrap robot5(robotmp2); + robot5.guardGate(); + +// ClapTrap robotmp3("robot6"); // PBM : assignation doesn't work... +// ScavTrap robot6(robotmp3); goAttack(robot1, robot2); goAttack(robot2, robot1); diff --git a/d03/ex01/robots b/d03/ex01/robots index 9d66d84..327bcf2 100755 Binary files a/d03/ex01/robots and b/d03/ex01/robots differ diff --git a/d03/ex03/DiamondTrap.cpp b/d03/ex03/DiamondTrap.cpp new file mode 100644 index 0000000..9a936c4 --- /dev/null +++ b/d03/ex03/DiamondTrap.cpp @@ -0,0 +1,31 @@ +#include "DiamondTrap.hpp" + +DiamondTrap::~DiamondTrap( std::string name ) : ScavTrap(name), FragTrap(name) { + + _class = "FragTrap"; + _hit = 100; + _energy = 100; + _attack = 30; + + std::cout << _class << " " << FragTrap::_name << " created with number " << _number << "\n"; + + return; +} + +/* + * destructor + */ + +DiamondTrap::~DiamondTrap( void ) { + std::cout << _class << " " << DiamondTrap::_name << " destructed\n"; + return; +} + +/* + * special capacity + */ + +void DiamondTrap::highFivesGuys() { + std::cout << _class << " " << DiamondTrap::_name << " wait for a high fives, common guys\n"; +} + diff --git a/d03/ex03/DiamondTrap.hpp b/d03/ex03/DiamondTrap.hpp new file mode 100644 index 0000000..ed1d20b --- /dev/null +++ b/d03/ex03/DiamondTrap.hpp @@ -0,0 +1,22 @@ +#ifndef DIAMONDTRAP_HPP +# define DIAMONDTRAP_HPP + +# include +# include +# include "ClapTrap.hpp" + +class DiamondTrap : public FragTrap, public ScavTrap { + +public: + + DiamondTrap( std::string name ); + ~DiamondTrap( void ); + + void whoAmI(); + +private: + + std::string _name; +}; + +#endif diff --git a/d03/ex03/FragTrap.hpp b/d03/ex03/FragTrap.hpp index bc3c68d..b52fdf7 100644 --- a/d03/ex03/FragTrap.hpp +++ b/d03/ex03/FragTrap.hpp @@ -5,7 +5,7 @@ #include #include "ClapTrap.hpp" -class FragTrap : public ClapTrap { +class FragTrap : virtual public ClapTrap { public: diff --git a/d03/ex03/ScavTrap.hpp b/d03/ex03/ScavTrap.hpp index 9618d2b..4dd9ba9 100644 --- a/d03/ex03/ScavTrap.hpp +++ b/d03/ex03/ScavTrap.hpp @@ -5,7 +5,7 @@ #include #include "ClapTrap.hpp" -class ScavTrap : public ClapTrap { +class ScavTrap : virtual public ClapTrap { public: