diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-04-14 18:02:14 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-04-14 18:02:14 +0200 |
| commit | efea8712aaf8169b1184cceb83705ca6b8783173 (patch) | |
| tree | 3c682f6af9d5877ddfa1740f4bac10f5f5123ddc /cpp04/ex02 | |
| parent | 119f7f96e77a2d86d692e82645dde4c2dc054052 (diff) | |
| download | piscine_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.cpp | 55 | ||||
| -rw-r--r-- | cpp04/ex02/AssaultTerminator.hpp | 34 | ||||
| -rw-r--r-- | cpp04/ex02/ISpaceMarine.hpp | 26 | ||||
| -rw-r--r-- | cpp04/ex02/ISquad.hpp | 27 | ||||
| -rw-r--r-- | cpp04/ex02/Squad.cpp | 73 | ||||
| -rw-r--r-- | cpp04/ex02/Squad.hpp | 38 | ||||
| -rw-r--r-- | cpp04/ex02/TacticalMarine.cpp | 55 | ||||
| -rw-r--r-- | cpp04/ex02/TacticalMarine.hpp | 34 | ||||
| -rw-r--r-- | cpp04/ex02/main.cpp | 37 |
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; +} |
