From c10aa969c60cedef893146307fa319250901465a Mon Sep 17 00:00:00 2001 From: Charles Cabergs Date: Fri, 11 Dec 2020 12:11:50 +0100 Subject: Fixing cpp04 according to correction --- cpp04/cpp04_correction | 146 +++++++++++++++++++++++++++++++++++++++++++++ cpp04/ex00/Peon.cpp | 35 ++++++++++- cpp04/ex00/Peon.hpp | 18 +++++- cpp04/ex00/Sorcerer.cpp | 8 ++- cpp04/ex00/Victim.cpp | 9 ++- cpp04/ex00/Victim.hpp | 4 +- cpp04/ex00/main.cpp | 36 ++++++++++- cpp04/ex01/PlasmaRifle.cpp | 21 ++++++- cpp04/ex01/PlasmaRifle.hpp | 16 ++++- cpp04/ex01/PowerFist.hpp | 4 +- cpp04/ex01/RadScorpion.cpp | 25 +++++++- cpp04/ex01/RadScorpion.hpp | 13 +++- cpp04/ex01/main.cpp | 30 +++++++++- cpp04/ex02/main.cpp | 5 +- cpp04/ex03/Character.cpp | 3 +- cpp04/ex03/Cure.hpp | 4 +- cpp04/ex03/Ice.hpp | 4 +- cpp04/ex03/main.cpp | 19 ++++-- cpp06/ex00/main.cpp | 101 +++++-------------------------- subjects/cpp04.en.pdf | Bin 1391044 -> 1391542 bytes 20 files changed, 380 insertions(+), 121 deletions(-) create mode 100644 cpp04/cpp04_correction diff --git a/cpp04/cpp04_correction b/cpp04/cpp04_correction new file mode 100644 index 0000000..abe6994 --- /dev/null +++ b/cpp04/cpp04_correction @@ -0,0 +1,146 @@ +ex00 +Comme d'habitude, il doit y avoir un main qui contient assez de tests pour prouver que le programme +fonctionne comme demandé. Si il n'y a pas de main, ou que les tests ne sont pas assez précis, +ou qu'une des classes n'est pas sous sa forme coplienne, ne notez pas cet exercice. + +> Tests approfondis +Il y a des tests dans le main qui utilisent les classes dérivées autre que Peon, +et tout fonctionne. + +> Donnez moi des moutons ! +La victime peut recevoir getPolymorphed() const, avec l'output correct. +Le Sorcerer peut utiliser polymorph(Victim const &) const. + +> Enchainement de destructeurs +Les destructeurs dans Victim et dérivés sont virtuels. + +> Sous classe facile +Il y a une classe Peon qui hérite publiquement de Victim. Les outputs sont corrects. + +> Victim +Il y a une classe Victim. Elle a un nom. Les outputs demandés +à la construction et à la destruction sont présents. +Les overloads d'opérateurs << vers ostream sont présents et fonctionnent +correctement. + +> Sorcerer +Il y a une classe Sorcerer. Elle a un nom et un titre. Elle a un constructeur avec un +nom et un titre. +La classe ne peut être instanciée sans paramètres. +Ca signifie que soit le constructeur par défaut est privé ou non implémenté, afin de respecter +la forme Coplienne. +Les outputs requis à la construction et destruction sont présents. +L'overload d'opérateur << est présent et fonctionnel. + +-------------------------------------------------------------------------------------------------------- + + +ex01 +Comme d'habitude, il doit y avoir un main qui contient assez de tests pour prouver que le programme +fonctionne comme demandé. Si il n'y a pas de main, ou que les tests ne sont pas assez précis, +ou qu'une des classes n'est pas sous sa forme coplienne, ne notez pas cet exercice. + +> Ennemis concrets +Il y a des ennemis concrets - SuperMutant et RadScorpion (qui héritent d'Enemy, bien évidemment) +Ils ont les attributs requis. +La classe SuperMutant a l'overload requis de takeDamage() et il fonctionne correctement. + +> Character +Il y a une classe Character. Elle a les attributs requis par le sujet : +name, AP pointer to AWeapon. +Le comportement requis pour AP est présent : +40 au début, perte de X AP quand il attaque (basé sur l'arme) et recupère +10 AP avec recoverAP (jusqu'à 40). attack() échoue si il n'y a pas assez +d'AP. + +> Armes concrètes +Il y a une classe PlasmaRifle et une classe PowerFist (qui héritent de +AWeapon). +Elles ont les attributs requis et attack() affiche la sortie demandée +par le sujet. + +> Utilitaire et output +Les fonctions equip() et attack() fonctionnent comme demandé. L'overload << +fonctionne comme demandé. + +> Chaine de destruction 2 +Les destructeurs dans AWeapon et ses dérivés sont virtuels. + +> Tests approfondis +Il y a des tests dans le main avec plus d'armes dérivées et plus d'ennemis dérivés. + +> Chaine de destruction AGAIN +Les destructeurs de Enemy et des ses dérivés sont virtuels. + +> Enemy +Il y a une classe Enemy. Elle a les attributs requis par le sujet : +type, HP. +Les fonctions membres sont implémentées correctement. +La vérification requise de takeDamage est présente et empêche d'aller +en dessous de 0 HP. + +> Weapon +Il y a une classe AWeapon. Elle est abstraite (attack() doit +être une fonction virtuelle pure). +Elle a les attributs demandés par le sujet : nom, dégats, cout d'AP. +Ses fonctions membres sont implémentées de manière cohérente. + +-------------------------------------------------------------------------------------------------------- + + +ex02 +Comme d'habitude, il doit y avoir un main qui contient assez de tests pour prouver que le programme +fonctionne comme demandé. Si il n'y a pas de main, ou que les tests ne sont pas assez précis, +ou qu'une des classes n'est pas sous sa forme coplienne, ne notez pas cet exercice. + +> Interfaces +Les interfaces ISquad et ISpaceMarine sont présentes et fonctionnent comme +demandé dans le sujet. + +> Concrete squad +La classe Squad est présemte et hérite de ISquad. +Ses fonctions membres fonctionnent comme demandé. +Le destructeur détruit les unités contenues. + +> Concrete units +Les classes TacticalMarine et AssaultTerminator sont présentes et +héritent de ISpaceMarine. +Leur fonctions membres fonctionnent comme attendu + +> Assignment and copy +Le comportement de la copie de l'assignation de la Squad sont comme demandé +dans le sujet. Ca signifie "deep copy" et à l'assignation, les unitées existantes +doivent être détruites avant d'être remplacées. + +-------------------------------------------------------------------------------------------------------- + + +ex03 +Comme d'habitude, il doit y avoir un main qui contient assez de tests pour prouver que le programme +fonctionne comme demandé. Si il n'y a pas de main, ou que les tests ne sont pas assez précis, +ou qu'une des classes n'est pas sous sa forme coplienne, ne notez pas cet exercice. + +> Interfaces +Les interfaces ICharacter et IMateriaSource sont présentes et sont +exactement comme demandé dans le sujet. + +> Source +La classe MateriaSource est présente et implémente IMateriaSource. Les +fonctions membres fonctionnent comme attendu. + +> Concrete materia +Il y a une classe concrète Ice et Cure qui héritent de AMateria. +Leur méthode clone() est implémentée correctement. Leur output est correct. + +> Caractère +La classe Character est présente et implémente ICharacter. Elle a un +inventaire de 4 materias. +Les fonctions membres sont implémentées comme le sujet le requiert. + +> Materia base +Il y a une classe AMateria. Elle a un type. C'est abstrait (le clone() est pur). +Le système d'XP est implémenté comme demandé. + +> Assignation et copie +La copie et l'assignation d'un Character sont implémentés comme demandé (= +deep copy, +/- comme l'exercice précedent) diff --git a/cpp04/ex00/Peon.cpp b/cpp04/ex00/Peon.cpp index 8388dc9..a3c2b4e 100644 --- a/cpp04/ex00/Peon.cpp +++ b/cpp04/ex00/Peon.cpp @@ -6,7 +6,7 @@ /* By: charles +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/13 20:53:16 by charles #+# #+# */ -/* Updated: 2020/11/12 13:01:42 by cacharle ### ########.fr */ +/* Updated: 2020/12/11 10:17:35 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,7 +23,10 @@ Peon& Peon::operator=(Peon const& other) return *this; } -Peon::Peon(Peon const& other) : Victim(other) {} +Peon::Peon(Peon const& other) : Victim(other) +{ + std::cout << "Zog zog." << std::endl; +} Peon::~Peon() { @@ -34,3 +37,31 @@ void Peon::getPolymorphed() const { std::cout << m_name << " has been turned into a pink pony!" << std::endl; } + +/************************************************************************************/ + +Rat::Rat(std::string const& name) : Victim(name) +{ + std::cout << "Rats rats, everywhere you look, everywhere you turn there is rats." << std::endl; +} + +Rat& Rat::operator=(Rat const& other) +{ + Victim::operator=(other); + return *this; +} + +Rat::Rat(Rat const& other) : Victim(other) +{ + std::cout << "Rats rats, everywhere you look, everywhere you turn there is rats." << std::endl; +} + +Rat::~Rat() +{ + std::cout << "I'll stop runing everything now" << std::endl; +} + +void Rat::getPolymorphed() const +{ + std::cout << m_name << " has been turned into Ninja" << std::endl; +} diff --git a/cpp04/ex00/Peon.hpp b/cpp04/ex00/Peon.hpp index 0f50207..7fe1e6b 100644 --- a/cpp04/ex00/Peon.hpp +++ b/cpp04/ex00/Peon.hpp @@ -6,7 +6,7 @@ /* By: charles +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/13 20:50:54 by charles #+# #+# */ -/* Updated: 2020/11/12 13:00:49 by cacharle ### ########.fr */ +/* Updated: 2020/12/11 10:26:58 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,7 +23,7 @@ public: Peon(std::string const& name); Peon& operator=(Peon const& other); Peon(Peon const& other); - ~Peon(); + virtual ~Peon(); virtual void getPolymorphed() const; @@ -31,4 +31,18 @@ private: Peon(); }; +class Rat : public Victim +{ +public: + Rat(std::string const& name); + Rat& operator=(Rat const& other); + Rat(Rat const& other); + virtual ~Rat(); + + virtual void getPolymorphed() const; + +private: + Rat(); +}; + #endif diff --git a/cpp04/ex00/Sorcerer.cpp b/cpp04/ex00/Sorcerer.cpp index 21c313b..8fab8e3 100644 --- a/cpp04/ex00/Sorcerer.cpp +++ b/cpp04/ex00/Sorcerer.cpp @@ -6,7 +6,7 @@ /* By: charles +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/13 20:29:19 by charles #+# #+# */ -/* Updated: 2020/11/17 08:45:02 by cacharle ### ########.fr */ +/* Updated: 2020/12/11 10:15:40 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -25,7 +25,11 @@ Sorcerer& Sorcerer::operator=(Sorcerer const& other) return *this; } -Sorcerer::Sorcerer(Sorcerer const& other) { *this = other; } +Sorcerer::Sorcerer(Sorcerer const& other) +{ + *this = other; + std::cout << m_name << ", " << m_title << ", is born!" << std::endl; +} Sorcerer::~Sorcerer() { diff --git a/cpp04/ex00/Victim.cpp b/cpp04/ex00/Victim.cpp index 97db6ff..ea11c6b 100644 --- a/cpp04/ex00/Victim.cpp +++ b/cpp04/ex00/Victim.cpp @@ -6,7 +6,7 @@ /* By: charles +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/13 20:42:22 by charles #+# #+# */ -/* Updated: 2020/11/12 12:59:36 by cacharle ### ########.fr */ +/* Updated: 2020/12/11 10:15:55 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -24,7 +24,12 @@ Victim& Victim::operator=(Victim const& other) return *this; } -Victim::Victim(Victim const& other) { *this = other; } +Victim::Victim(Victim const& other) +{ + *this = other; + std::cout << "Some random victim called " << m_name + << " just appeared!" << std::endl; +} Victim::~Victim() { diff --git a/cpp04/ex00/Victim.hpp b/cpp04/ex00/Victim.hpp index bf2b467..f7c4218 100644 --- a/cpp04/ex00/Victim.hpp +++ b/cpp04/ex00/Victim.hpp @@ -6,7 +6,7 @@ /* By: charles +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/13 20:40:50 by charles #+# #+# */ -/* Updated: 2020/11/12 12:57:01 by cacharle ### ########.fr */ +/* Updated: 2020/12/11 10:26:56 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -22,7 +22,7 @@ public: Victim(std::string const& name); Victim& operator=(Victim const& other); Victim(Victim const& other); - ~Victim(); + virtual ~Victim(); std::string const& getName() const; virtual void getPolymorphed() const; diff --git a/cpp04/ex00/main.cpp b/cpp04/ex00/main.cpp index d8eb897..f585dab 100644 --- a/cpp04/ex00/main.cpp +++ b/cpp04/ex00/main.cpp @@ -6,7 +6,7 @@ /* By: charles +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/13 20:47:34 by charles #+# #+# */ -/* Updated: 2020/11/17 08:42:34 by cacharle ### ########.fr */ +/* Updated: 2020/12/11 10:29:53 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -35,6 +35,10 @@ int main() Sorcerer s_copied(s); Sorcerer s_assigned("foo", "yep clock"); s_assigned = s; + Sorcerer *s_ptr = new Sorcerer("Foo", "Bar"); + std::cout << *s_ptr; + s_ptr->polymorph(Peon("Yep")); + delete s_ptr; std::cout << "Copied: " << s_copied; std::cout << "Assigned: " << s_assigned; } @@ -47,6 +51,10 @@ int main() Victim v_copied(v); Victim v_assigned("bar"); v_assigned = v; + Victim *v_ptr = new Victim("Foo"); + std::cout << *v_ptr; + v_ptr->getPolymorphed(); + delete v_ptr; std::cout << "Copied: " << v_copied; std::cout << "Assigned: " << v_assigned; v.getPolymorphed(); @@ -56,14 +64,38 @@ int main() { std::cout << "==================== PEON =====================" << std::endl; - Peon p("Victoire"); + Peon p("Pionnier"); Peon p_copied(p); Peon p_assigned("baz"); p_assigned = p; + Peon *p_ptr = new Peon("Foo"); + std::cout << *p_ptr; + p_ptr->getPolymorphed(); + delete p_ptr; std::cout << "Copied: " << p_copied; std::cout << "Assigned: " << p_assigned; p.getPolymorphed(); } + std::cout << std::endl; + + { + std::cout << "==================== RAT =====================" << std::endl; + Rat r("Ratteur"); + std::cout << r; + Rat r_copied(r); + Rat r_assigned("baz"); + r_assigned = r; + Rat *r_ptr = new Rat("Foo"); + std::cout << *r_ptr; + r_ptr->getPolymorphed(); + delete r_ptr; + std::cout << "Copied: " << r_copied; + std::cout << "Assigned: " << r_assigned; + r.getPolymorphed(); + Sorcerer s("Sorcier", "Yes man"); + s.polymorph(r); + } + return 0; } diff --git a/cpp04/ex01/PlasmaRifle.cpp b/cpp04/ex01/PlasmaRifle.cpp index fc6bddd..df06864 100644 --- a/cpp04/ex01/PlasmaRifle.cpp +++ b/cpp04/ex01/PlasmaRifle.cpp @@ -6,7 +6,7 @@ /* By: charles +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/14 13:07:24 by charles #+# #+# */ -/* Updated: 2020/11/12 13:35:36 by cacharle ### ########.fr */ +/* Updated: 2020/12/11 10:56:23 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -28,3 +28,22 @@ void PlasmaRifle::attack() const { std::cout << "* piouuu piouuu piouuu *" << std::endl; } + +/******************************************************************************/ + +ThisIsNotAPlasmaRifle::ThisIsNotAPlasmaRifle() : AWeapon("Not a Plasma Rifle", 5, 21) {} + +ThisIsNotAPlasmaRifle::ThisIsNotAPlasmaRifle(ThisIsNotAPlasmaRifle const& other) : AWeapon(other) {} + +ThisIsNotAPlasmaRifle& ThisIsNotAPlasmaRifle::operator=(ThisIsNotAPlasmaRifle const& other) +{ + AWeapon::operator=(other); + return *this; +} + +ThisIsNotAPlasmaRifle::~ThisIsNotAPlasmaRifle() {} + +void ThisIsNotAPlasmaRifle::attack() const +{ + std::cout << "* not piouuu piouuu piouuu *" << std::endl; +} diff --git a/cpp04/ex01/PlasmaRifle.hpp b/cpp04/ex01/PlasmaRifle.hpp index 8ce7b0d..53088a9 100644 --- a/cpp04/ex01/PlasmaRifle.hpp +++ b/cpp04/ex01/PlasmaRifle.hpp @@ -6,7 +6,7 @@ /* By: charles +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/14 12:15:47 by charles #+# #+# */ -/* Updated: 2020/11/12 13:36:55 by cacharle ### ########.fr */ +/* Updated: 2020/12/11 10:55:04 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -22,12 +22,24 @@ public: PlasmaRifle(); PlasmaRifle(PlasmaRifle const& other); PlasmaRifle& operator=(PlasmaRifle const& other); - ~PlasmaRifle(); + virtual ~PlasmaRifle(); virtual void attack() const; private: }; +class ThisIsNotAPlasmaRifle : public AWeapon +{ +public: + ThisIsNotAPlasmaRifle(); + ThisIsNotAPlasmaRifle(ThisIsNotAPlasmaRifle const& other); + ThisIsNotAPlasmaRifle& operator=(ThisIsNotAPlasmaRifle const& other); + virtual ~ThisIsNotAPlasmaRifle(); + + virtual void attack() const; + +private: +}; #endif diff --git a/cpp04/ex01/PowerFist.hpp b/cpp04/ex01/PowerFist.hpp index 100933a..fa347c8 100644 --- a/cpp04/ex01/PowerFist.hpp +++ b/cpp04/ex01/PowerFist.hpp @@ -6,7 +6,7 @@ /* By: charles +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/14 13:14:42 by charles #+# #+# */ -/* Updated: 2020/11/12 13:40:00 by cacharle ### ########.fr */ +/* Updated: 2020/12/11 10:41:32 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -22,7 +22,7 @@ public: PowerFist(); PowerFist(PowerFist const& other); PowerFist& operator=(PowerFist const& other); - ~PowerFist(); + virtual ~PowerFist(); virtual void attack() const; diff --git a/cpp04/ex01/RadScorpion.cpp b/cpp04/ex01/RadScorpion.cpp index 7e2ea84..a5fcb27 100644 --- a/cpp04/ex01/RadScorpion.cpp +++ b/cpp04/ex01/RadScorpion.cpp @@ -6,7 +6,7 @@ /* By: charles +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/14 13:36:11 by charles #+# #+# */ -/* Updated: 2020/11/12 13:55:44 by cacharle ### ########.fr */ +/* Updated: 2020/12/11 10:54:28 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -32,3 +32,26 @@ RadScorpion::~RadScorpion() { std::cout << "* SPROTCH *" << std::endl; } + +/*****************************************************************************/ + +NotSoRadScorpion::NotSoRadScorpion() : Enemy(80, "NotSoRadScorpion") +{ + std::cout << "* not so click click click *" << std::endl; +} + +NotSoRadScorpion::NotSoRadScorpion(NotSoRadScorpion const& other) : Enemy(other) +{ + std::cout << "* not so click click click *" << std::endl; +} + +NotSoRadScorpion& NotSoRadScorpion::operator=(NotSoRadScorpion const& other) +{ + Enemy::operator=(other); + return *this; +} + +NotSoRadScorpion::~NotSoRadScorpion() +{ + std::cout << "* SPROTCH (fuck this correction pdf) *" << std::endl; +} diff --git a/cpp04/ex01/RadScorpion.hpp b/cpp04/ex01/RadScorpion.hpp index 70bac44..252fcc0 100644 --- a/cpp04/ex01/RadScorpion.hpp +++ b/cpp04/ex01/RadScorpion.hpp @@ -6,7 +6,7 @@ /* By: charles +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/14 13:35:04 by charles #+# #+# */ -/* Updated: 2020/11/13 11:41:55 by cacharle ### ########.fr */ +/* Updated: 2020/12/11 11:01:22 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -27,4 +27,15 @@ public: private: }; +class NotSoRadScorpion : public Enemy +{ +public: + NotSoRadScorpion(); + NotSoRadScorpion(NotSoRadScorpion const& other); + NotSoRadScorpion& operator=(NotSoRadScorpion const& other); + virtual ~NotSoRadScorpion(); + +private: +}; + #endif diff --git a/cpp04/ex01/main.cpp b/cpp04/ex01/main.cpp index 7b0729c..7b36816 100644 --- a/cpp04/ex01/main.cpp +++ b/cpp04/ex01/main.cpp @@ -6,7 +6,7 @@ /* By: charles +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/14 09:05:58 by charles #+# #+# */ -/* Updated: 2020/11/17 09:16:14 by cacharle ### ########.fr */ +/* Updated: 2020/12/11 11:02:36 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -217,5 +217,33 @@ int main() c.attack(r); } + std::cout << std::endl; + + { + std::cout << "================ MORE DERIVED ====================" << std::endl; + Character c("YOP"); + Enemy* r = new RadScorpion(); + Enemy* s = new SuperMutant(); + Enemy* n = new NotSoRadScorpion(); + c.attack(r); + c.attack(s); + c.attack(n); + AWeapon *pr = new PlasmaRifle(); + AWeapon *pf = new PowerFist(); + AWeapon *npr = new ThisIsNotAPlasmaRifle(); + c.equip(pr); + c.attack(n); + c.equip(pf); + c.attack(s); + c.equip(npr); + c.attack(r); + delete npr; + delete pf; + delete pr; + delete n; + delete s; + delete r; + } + return 0; } diff --git a/cpp04/ex02/main.cpp b/cpp04/ex02/main.cpp index ae2c73a..6d68225 100644 --- a/cpp04/ex02/main.cpp +++ b/cpp04/ex02/main.cpp @@ -6,7 +6,7 @@ /* By: charles +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/14 15:50:35 by charles #+# #+# */ -/* Updated: 2020/11/17 09:32:46 by cacharle ### ########.fr */ +/* Updated: 2020/12/11 11:30:48 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -80,8 +80,7 @@ int main() std::cout << "================ SQUAD =====================" << std::endl; Squad s; std::cout << "Count: " << s.getCount() << std::endl; - s.push(new TacticalMarine()); - std::cout << "Count: " << s.getCount() << std::endl; + std::cout << "Count (push): " << s.push(new TacticalMarine()) << std::endl; s.push(new TacticalMarine()); s.push(new AssaultTerminator()); s.push(new AssaultTerminator()); diff --git a/cpp04/ex03/Character.cpp b/cpp04/ex03/Character.cpp index 57fcfeb..42e07da 100644 --- a/cpp04/ex03/Character.cpp +++ b/cpp04/ex03/Character.cpp @@ -6,7 +6,7 @@ /* By: charles +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/14 16:45:54 by charles #+# #+# */ -/* Updated: 2020/11/17 08:30:21 by cacharle ### ########.fr */ +/* Updated: 2020/12/11 12:08:56 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -44,7 +44,6 @@ void Character::unequip(int idx) { if (idx < 0 || idx >= m_inventory_size) return; - delete m_inventory[idx]; for (int i = idx; i < m_inventory_size - 1; i++) m_inventory[i] = m_inventory[i + 1]; m_inventory_size--; diff --git a/cpp04/ex03/Cure.hpp b/cpp04/ex03/Cure.hpp index 71647ff..9b45020 100644 --- a/cpp04/ex03/Cure.hpp +++ b/cpp04/ex03/Cure.hpp @@ -6,7 +6,7 @@ /* By: charles +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/14 17:37:11 by charles #+# #+# */ -/* Updated: 2020/11/13 14:09:18 by cacharle ### ########.fr */ +/* Updated: 2020/12/11 11:41:11 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -22,7 +22,7 @@ public: Cure(); Cure(Cure const& other); Cure& operator=(Cure const& other); - ~Cure(); + virtual ~Cure(); virtual AMateria* clone() const; virtual void use(ICharacter& target); diff --git a/cpp04/ex03/Ice.hpp b/cpp04/ex03/Ice.hpp index 41f07de..637f440 100644 --- a/cpp04/ex03/Ice.hpp +++ b/cpp04/ex03/Ice.hpp @@ -6,7 +6,7 @@ /* By: charles +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/14 16:31:34 by charles #+# #+# */ -/* Updated: 2020/11/13 14:09:24 by cacharle ### ########.fr */ +/* Updated: 2020/12/11 11:41:02 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -22,7 +22,7 @@ public: Ice(); Ice(Ice const& other); Ice& operator=(Ice const& other); - ~Ice(); + virtual ~Ice(); virtual AMateria* clone() const; virtual void use(ICharacter& target); diff --git a/cpp04/ex03/main.cpp b/cpp04/ex03/main.cpp index bede834..a45b990 100644 --- a/cpp04/ex03/main.cpp +++ b/cpp04/ex03/main.cpp @@ -6,7 +6,7 @@ /* By: charles +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/14 17:58:01 by charles #+# #+# */ -/* Updated: 2020/11/17 08:33:22 by cacharle ### ########.fr */ +/* Updated: 2020/12/11 12:08:44 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -135,12 +135,16 @@ int main() std::cout << "Name: " << c3.getName() << std::endl; std::cout << "################## EQUIP/USE" << std::endl; - c.equip(new Ice()); - c.equip(new Cure()); + AMateria *tmp0 = new Ice(); + AMateria *tmp1 = new Cure(); + AMateria *tmp2 = new Cure(); + AMateria *tmp3 = new Ice(); + c.equip(tmp0); + c.equip(tmp1); c.use(0, ch); c.use(1, ch); - c.equip(new Cure()); - c.equip(new Ice()); + c.equip(tmp2); + c.equip(tmp3); c.use(2, ch); c.use(3, ch); c.use(-1, ch); @@ -165,6 +169,10 @@ int main() c.use(0, ch); c.equip(NULL); c.use(1, ch); + delete tmp0; + delete tmp1; + delete tmp2; + delete tmp3; std::cout << "################## DEEP COPY" << std::endl; c.equip(new Ice()); @@ -191,7 +199,6 @@ int main() ic->use(2, ch); ic->equip(new Ice()); ic->use(3, ch); - ic->unequip(1); ic->use(1, ch); delete ic; } diff --git a/cpp06/ex00/main.cpp b/cpp06/ex00/main.cpp index ec30bb8..b82c106 100644 --- a/cpp06/ex00/main.cpp +++ b/cpp06/ex00/main.cpp @@ -6,7 +6,7 @@ /* By: charles +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/16 10:54:10 by charles #+# #+# */ -/* Updated: 2020/11/11 09:21:08 by cacharle ### ########.fr */ +/* Updated: 2020/11/18 15:53:33 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,91 +16,20 @@ int main(int argc, char **argv) { - if (argc != 2) - { - std::cerr << "Usage: " << argv[0] << " litteral" << std::endl; - return 1; - } - - - std::string s(argv[1]); - - if (s.empty()) - { - std::cerr << "Cannot be empty" << std::endl; - return 1; - } - - bool negative = false; - if (s[0] == '-' || s[0] == '+') - { - if (s[0] == '-') - negative = true; - s.erase(0, 1); - } - - char c; - int i; - float f; - double d; - - if (s == "nan" || s == "inf") - { - d = s == "nan" ? NaN : inf; - if (negative) - d = -d; - f = static_cast(d); - i = static_cast(d); - c = static_cast(d); - } - if (s == "nanf" || s == "inff") - { - f = s == "nanf" ? NaN : inff; - if (negative) - f = -f; - d = static_cast(f); - i = static_cast(f); - c = static_cast(f); - } - - if (isdigit(s[0])) - { - std::stringstream ss(s); - - if (s.find(".") == -1) - { - ss >> i; - d = static_cast(i); - f = static_cast(i); - c = static_cast(i); - } - else if (s.find("f") != -1) - { - ss >> f; - d = static_cast(f); - i = static_cast(f); - c = static_cast(f); - } - else - { - ss >> d; - f = static_cast(d); - i = static_cast(d); - c = static_cast(d); - } - } - else if (!negative && s.length == 1) - { - c = s[0]; - d = static_cast(c); - f = static_cast(c); - i = static_cast(c); - } - else - { - std::cout << "Parsing error" << std::endl; - return 1; - } + // if (argc != 2) + // { + // std::cerr << "Usage: " << argv[0] << " litteral" << std::endl; + // return 1; + // } + // + // + // std::string s(argv[1]); + // + // if (s.empty()) + // { + // std::cerr << "Cannot be empty" << std::endl; + // return 1; + // } return 0; diff --git a/subjects/cpp04.en.pdf b/subjects/cpp04.en.pdf index 4d789a3..3e4f34a 100644 Binary files a/subjects/cpp04.en.pdf and b/subjects/cpp04.en.pdf differ -- cgit