aboutsummaryrefslogtreecommitdiff
path: root/cpp04/ex02
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-04-14 18:02:14 +0200
committerCharles <sircharlesaze@gmail.com>2020-04-14 18:02:14 +0200
commitefea8712aaf8169b1184cceb83705ca6b8783173 (patch)
tree3c682f6af9d5877ddfa1740f4bac10f5f5123ddc /cpp04/ex02
parent119f7f96e77a2d86d692e82645dde4c2dc054052 (diff)
downloadpiscine_cpp-efea8712aaf8169b1184cceb83705ca6b8783173.tar.gz
piscine_cpp-efea8712aaf8169b1184cceb83705ca6b8783173.tar.bz2
piscine_cpp-efea8712aaf8169b1184cceb83705ca6b8783173.zip
cpp04, ex03 not finished, require more sophisticated main
Diffstat (limited to 'cpp04/ex02')
-rw-r--r--cpp04/ex02/AssaultTerminator.cpp55
-rw-r--r--cpp04/ex02/AssaultTerminator.hpp34
-rw-r--r--cpp04/ex02/ISpaceMarine.hpp26
-rw-r--r--cpp04/ex02/ISquad.hpp27
-rw-r--r--cpp04/ex02/Squad.cpp73
-rw-r--r--cpp04/ex02/Squad.hpp38
-rw-r--r--cpp04/ex02/TacticalMarine.cpp55
-rw-r--r--cpp04/ex02/TacticalMarine.hpp34
-rw-r--r--cpp04/ex02/main.cpp37
9 files changed, 379 insertions, 0 deletions
diff --git a/cpp04/ex02/AssaultTerminator.cpp b/cpp04/ex02/AssaultTerminator.cpp
new file mode 100644
index 0000000..40518da
--- /dev/null
+++ b/cpp04/ex02/AssaultTerminator.cpp
@@ -0,0 +1,55 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* AssaultTerminator.cpp :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/14 15:47:06 by charles #+# #+# */
+/* Updated: 2020/04/14 15:51:46 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "AssaultTerminator.hpp"
+
+AssaultTerminator::AssaultTerminator()
+{
+ std::cout << "* teleports from space *" << std::endl;
+}
+
+AssaultTerminator::AssaultTerminator(AssaultTerminator const& other)
+{
+ *this = other;
+}
+
+void AssaultTerminator::operator=(AssaultTerminator const& other)
+{
+ (void)other;
+}
+
+AssaultTerminator::~AssaultTerminator()
+{
+ std::cout << "I'll be back..." << std::endl;
+}
+
+ISpaceMarine* AssaultTerminator::clone() const
+{
+ ISpaceMarine* cloned = new AssaultTerminator();
+ *cloned = *this;
+ return cloned;
+}
+
+void AssaultTerminator::battleCry() const
+{
+ std::cout << "This code is unclean. PURIFY IT!" << std::endl;
+}
+
+void AssaultTerminator::rangedAttack() const
+{
+ std::cout << "* does nothing *" << std::endl;
+}
+
+void AssaultTerminator::meleeAttack() const
+{
+ std::cout << "* attacks with chainfists *" << std::endl;
+}
diff --git a/cpp04/ex02/AssaultTerminator.hpp b/cpp04/ex02/AssaultTerminator.hpp
new file mode 100644
index 0000000..e2d7acd
--- /dev/null
+++ b/cpp04/ex02/AssaultTerminator.hpp
@@ -0,0 +1,34 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* AssaultTerminator.hpp :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/14 15:46:20 by charles #+# #+# */
+/* Updated: 2020/04/14 15:52:47 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#ifndef ASSAULTTERMINATOR_HPP
+# define ASSAULTTERMINATOR_HPP
+
+# include <iostream>
+# include "ISpaceMarine.hpp"
+
+class AssaultTerminator : public ISpaceMarine
+{
+public:
+ AssaultTerminator();
+ AssaultTerminator(AssaultTerminator const& other);
+ void operator=(AssaultTerminator const& other);
+ virtual ~AssaultTerminator();
+
+ virtual ISpaceMarine* clone() const;
+ virtual void battleCry() const;
+ virtual void rangedAttack() const;
+ virtual void meleeAttack() const;
+private:
+};
+
+#endif
diff --git a/cpp04/ex02/ISpaceMarine.hpp b/cpp04/ex02/ISpaceMarine.hpp
new file mode 100644
index 0000000..ebb5583
--- /dev/null
+++ b/cpp04/ex02/ISpaceMarine.hpp
@@ -0,0 +1,26 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ISpaceMarine.hpp :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/14 15:12:33 by charles #+# #+# */
+/* Updated: 2020/04/14 15:28:26 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#ifndef ISPACEMARINE_HPP
+# define ISPACEMARINE_HPP
+
+class ISpaceMarine
+{
+public:
+ virtual ~ISpaceMarine() {}
+ virtual ISpaceMarine* clone() const = 0;
+ virtual void battleCry() const = 0;
+ virtual void rangedAttack() const = 0;
+ virtual void meleeAttack() const = 0;
+};
+
+#endif
diff --git a/cpp04/ex02/ISquad.hpp b/cpp04/ex02/ISquad.hpp
new file mode 100644
index 0000000..7e73928
--- /dev/null
+++ b/cpp04/ex02/ISquad.hpp
@@ -0,0 +1,27 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ISquad.hpp :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/14 15:02:01 by charles #+# #+# */
+/* Updated: 2020/04/14 15:27:28 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#ifndef ISQUAD_HPP
+# define ISQUAD_HPP
+
+# include "ISpaceMarine.hpp"
+
+class ISquad
+{
+public:
+ virtual ~ISquad() {}
+ virtual int getCount() const = 0;
+ virtual ISpaceMarine* getUnit(int n) const = 0;
+ virtual int push(ISpaceMarine* spaceMarine) = 0;
+};
+
+#endif
diff --git a/cpp04/ex02/Squad.cpp b/cpp04/ex02/Squad.cpp
new file mode 100644
index 0000000..ba825b9
--- /dev/null
+++ b/cpp04/ex02/Squad.cpp
@@ -0,0 +1,73 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* Squad.cpp :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/14 15:08:35 by charles #+# #+# */
+/* Updated: 2020/04/14 15:54:17 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "Squad.hpp"
+
+Squad::Squad() : m_units(new ISpaceMarine*[0]), m_size(0)
+{
+}
+
+Squad::Squad(Squad const& other)
+{
+ *this = other;
+}
+
+void Squad::operator=(Squad const& other)
+{
+ destroyUnits();
+ m_size = other.m_size;
+ m_units = new ISpaceMarine*[m_size];
+ for (int i = 0; i < m_size; i++)
+ m_units[i] = other.m_units[i]->clone();
+}
+
+Squad::~Squad()
+{
+ destroyUnits();
+}
+
+int Squad::getCount() const
+{
+ return m_size;
+}
+
+ISpaceMarine* Squad::getUnit(int n) const
+{
+ if (n < 0 || n >= m_size)
+ return nullptr;
+ return m_units[n];
+}
+
+int Squad::push(ISpaceMarine* spaceMarine)
+{
+ if (spaceMarine == nullptr)
+ return (-1);
+ for (int i = 0; i < m_size; i++)
+ if (m_units[i] == spaceMarine)
+ return (-1);
+
+ ISpaceMarine** new_units = new ISpaceMarine*[m_size + 1];
+ for (int i = 0; i < m_size; i++)
+ new_units[i] = m_units[i];
+ new_units[m_size] = spaceMarine;
+ delete [] m_units;
+ m_size++;
+ m_units = new_units;
+ return m_size;
+}
+
+void Squad::destroyUnits()
+{
+ for (int i = 0; i < m_size; i++)
+ delete m_units[i];
+ delete [] m_units;
+}
diff --git a/cpp04/ex02/Squad.hpp b/cpp04/ex02/Squad.hpp
new file mode 100644
index 0000000..fda1148
--- /dev/null
+++ b/cpp04/ex02/Squad.hpp
@@ -0,0 +1,38 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* Squad.hpp :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/14 15:07:57 by charles #+# #+# */
+/* Updated: 2020/04/14 15:28:02 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#ifndef SQUAD_HPP
+# define SQUAD_HPP
+
+# include "ISquad.hpp"
+# include "ISpaceMarine.hpp"
+
+class Squad : public ISquad
+{
+public:
+ Squad();
+ Squad(Squad const& other);
+ void operator=(Squad const& other);
+ virtual ~Squad();
+
+ virtual int getCount() const;
+ virtual ISpaceMarine* getUnit(int n) const;
+ virtual int push(ISpaceMarine* spaceMarine);
+
+private:
+ void destroyUnits();
+
+ ISpaceMarine** m_units;
+ int m_size;
+};
+
+#endif
diff --git a/cpp04/ex02/TacticalMarine.cpp b/cpp04/ex02/TacticalMarine.cpp
new file mode 100644
index 0000000..f2684ba
--- /dev/null
+++ b/cpp04/ex02/TacticalMarine.cpp
@@ -0,0 +1,55 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* TacticalMarine.cpp :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/14 15:31:43 by charles #+# #+# */
+/* Updated: 2020/04/14 15:45:55 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "TacticalMarine.hpp"
+
+TacticalMarine::TacticalMarine()
+{
+ std::cout << "Tactical Marine ready for battle!" << std::endl;
+}
+
+TacticalMarine::TacticalMarine(TacticalMarine const& other)
+{
+ *this = other;
+}
+
+void TacticalMarine::operator=(TacticalMarine const& other)
+{
+ (void)other;
+}
+
+TacticalMarine::~TacticalMarine()
+{
+ std::cout << "Aaargh..." << std::endl;
+}
+
+ISpaceMarine* TacticalMarine::clone() const
+{
+ ISpaceMarine* cloned = new TacticalMarine();
+ *cloned = *this;
+ return cloned;
+}
+
+void TacticalMarine::battleCry() const
+{
+ std::cout << "For the holy PLOT!" << std::endl;
+}
+
+void TacticalMarine::rangedAttack() const
+{
+ std::cout << "* attacks with a botler *" << std::endl;
+}
+
+void TacticalMarine::meleeAttack() const
+{
+ std::cout << "* attacks with a chainsword *" << std::endl;
+}
diff --git a/cpp04/ex02/TacticalMarine.hpp b/cpp04/ex02/TacticalMarine.hpp
new file mode 100644
index 0000000..18dd0c9
--- /dev/null
+++ b/cpp04/ex02/TacticalMarine.hpp
@@ -0,0 +1,34 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* TacticalMarine.hpp :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/14 15:30:48 by charles #+# #+# */
+/* Updated: 2020/04/14 15:34:12 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#ifndef TACTICALMARINE_HPP
+# define TACTICALMARINE_HPP
+
+# include <iostream>
+# include "ISpaceMarine.hpp"
+
+class TacticalMarine : public ISpaceMarine
+{
+public:
+ TacticalMarine();
+ TacticalMarine(TacticalMarine const& other);
+ void operator=(TacticalMarine const& other);
+ virtual ~TacticalMarine();
+
+ virtual ISpaceMarine* clone() const;
+ virtual void battleCry() const;
+ virtual void rangedAttack() const;
+ virtual void meleeAttack() const;
+private:
+};
+
+#endif
diff --git a/cpp04/ex02/main.cpp b/cpp04/ex02/main.cpp
new file mode 100644
index 0000000..137ce46
--- /dev/null
+++ b/cpp04/ex02/main.cpp
@@ -0,0 +1,37 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* main.cpp :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/14 15:50:35 by charles #+# #+# */
+/* Updated: 2020/04/14 15:53:35 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "ISpaceMarine.hpp"
+#include "ISquad.hpp"
+#include "Squad.hpp"
+#include "TacticalMarine.hpp"
+#include "AssaultTerminator.hpp"
+
+int main()
+{
+ ISpaceMarine* bob = new TacticalMarine;
+ ISpaceMarine* jim = new AssaultTerminator;
+
+ ISquad* vlc = new Squad;
+ vlc->push(bob);
+ vlc->push(jim);
+ for (int i = 0; i < vlc->getCount(); ++i)
+ {
+ ISpaceMarine* cur = vlc->getUnit(i);
+ cur->battleCry();
+ cur->rangedAttack();
+ cur->meleeAttack();
+ }
+ delete vlc;
+
+ return 0;
+}