aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cpp04/cpp04_correction146
-rw-r--r--cpp04/ex00/Peon.cpp35
-rw-r--r--cpp04/ex00/Peon.hpp18
-rw-r--r--cpp04/ex00/Sorcerer.cpp8
-rw-r--r--cpp04/ex00/Victim.cpp9
-rw-r--r--cpp04/ex00/Victim.hpp4
-rw-r--r--cpp04/ex00/main.cpp36
-rw-r--r--cpp04/ex01/PlasmaRifle.cpp21
-rw-r--r--cpp04/ex01/PlasmaRifle.hpp16
-rw-r--r--cpp04/ex01/PowerFist.hpp4
-rw-r--r--cpp04/ex01/RadScorpion.cpp25
-rw-r--r--cpp04/ex01/RadScorpion.hpp13
-rw-r--r--cpp04/ex01/main.cpp30
-rw-r--r--cpp04/ex02/main.cpp5
-rw-r--r--cpp04/ex03/Character.cpp3
-rw-r--r--cpp04/ex03/Cure.hpp4
-rw-r--r--cpp04/ex03/Ice.hpp4
-rw-r--r--cpp04/ex03/main.cpp19
-rw-r--r--cpp06/ex00/main.cpp101
-rw-r--r--subjects/cpp04.en.pdfbin1391044 -> 1391542 bytes
20 files changed, 380 insertions, 121 deletions
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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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<float>(d);
- i = static_cast<int>(d);
- c = static_cast<char>(d);
- }
- if (s == "nanf" || s == "inff")
- {
- f = s == "nanf" ? NaN : inff;
- if (negative)
- f = -f;
- d = static_cast<double>(f);
- i = static_cast<int>(f);
- c = static_cast<char>(f);
- }
-
- if (isdigit(s[0]))
- {
- std::stringstream ss(s);
-
- if (s.find(".") == -1)
- {
- ss >> i;
- d = static_cast<double>(i);
- f = static_cast<float>(i);
- c = static_cast<char>(i);
- }
- else if (s.find("f") != -1)
- {
- ss >> f;
- d = static_cast<double>(f);
- i = static_cast<int>(f);
- c = static_cast<char>(f);
- }
- else
- {
- ss >> d;
- f = static_cast<float>(d);
- i = static_cast<int>(d);
- c = static_cast<char>(d);
- }
- }
- else if (!negative && s.length == 1)
- {
- c = s[0];
- d = static_cast<double>(c);
- f = static_cast<float>(c);
- i = static_cast<int>(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
--- a/subjects/cpp04.en.pdf
+++ b/subjects/cpp04.en.pdf
Binary files differ