From 9ae1ff439891b0c3a6ae861a25bcbf3bf393fd48 Mon Sep 17 00:00:00 2001 From: Marina Krcek Date: Wed, 14 Nov 2018 16:36:39 +0100 Subject: [PATCH 1/2] Day 3, Exercise 01, Animal classes - make unit test pass --- exercise/01/animal.cpp | 73 ++++++++++++++++++++++++++++++++++++++++++ exercise/01/animal.h | 70 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 143 insertions(+) create mode 100644 exercise/01/animal.cpp create mode 100644 exercise/01/animal.h diff --git a/exercise/01/animal.cpp b/exercise/01/animal.cpp new file mode 100644 index 0000000..2773405 --- /dev/null +++ b/exercise/01/animal.cpp @@ -0,0 +1,73 @@ +#include "animal.h" + +unsigned int insect::legs() const +{ + return 6; +} + +std::wstring cockroach::species() const +{ + return L"cockroach"; +} + +unsigned int bird::legs() const +{ + return 2; +} + +std::wstring sparrow::species() const +{ + return L"sparrow"; +} + +unsigned int spider::legs() const +{ + return 8; +} + +std::wstring tarantula::species() const +{ + return L"tarantula"; +} + +std::wstring leg_counter::add_animal(const animal_factory& animal_fac) +{ + auto animal = animal_fac.get_animal(); + nlegs += animal->legs(); + return animal->species(); +} + +unsigned int leg_counter::legs() const +{ + return nlegs; +} + +animal_factory::animal_factory(unsigned int id) +{ + switch (id) + { + case 1: + a = new cockroach; + break; + case 2: + a = new sparrow; + break; + case 3: + a = new tarantula; + break; + default: + throw std::invalid_argument("Wrong id."); + } +} + +animal_factory::~animal_factory() +{ + if (!a) + return; + delete a; +} + +animal* animal_factory::get_animal() const +{ + return a; +} diff --git a/exercise/01/animal.h b/exercise/01/animal.h new file mode 100644 index 0000000..8beceb4 --- /dev/null +++ b/exercise/01/animal.h @@ -0,0 +1,70 @@ +#include + +class animal +{ +public: + virtual std::wstring species() const = 0; + virtual unsigned int legs() const = 0; + virtual ~animal() {}; +}; + +class animal_factory +{ + animal* a; +public: + animal_factory(unsigned int id); + ~animal_factory(); + animal* get_animal() const; +}; + + +class insect : public animal +{ +public: + unsigned int legs() const override; + ~insect() {}; +}; + +class cockroach : public insect +{ +public: + std::wstring species() const override; + ~cockroach() {} +}; + +class bird : public animal +{ +public: + unsigned int legs() const override; + ~bird() {}; +}; + +class sparrow : public bird +{ +public: + std::wstring species() const override; + ~sparrow() {}; +}; + +class spider : public animal +{ +public: + unsigned int legs() const override; + ~spider() {}; +}; + +class tarantula : public spider +{ +public: + std::wstring species() const override; + ~tarantula() {}; +}; + +class leg_counter +{ + unsigned int nlegs; +public: + leg_counter() : nlegs(0) {}; + std::wstring add_animal(const animal_factory& animal_fac); + unsigned int legs() const; +}; From da901183f034272ea5508ccdfada6d1a48b53e4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marina=20Kr=C4=8Dek?= Date: Wed, 14 Nov 2018 18:33:15 +0100 Subject: [PATCH 2/2] Day 03, Exercise 01, Animal class - remove destructors --- exercise/01/animal.h | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/exercise/01/animal.h b/exercise/01/animal.h index 8beceb4..7c7a9ef 100644 --- a/exercise/01/animal.h +++ b/exercise/01/animal.h @@ -5,7 +5,7 @@ class animal public: virtual std::wstring species() const = 0; virtual unsigned int legs() const = 0; - virtual ~animal() {}; + virtual ~animal() = default; }; class animal_factory @@ -22,42 +22,36 @@ class insect : public animal { public: unsigned int legs() const override; - ~insect() {}; }; class cockroach : public insect { public: std::wstring species() const override; - ~cockroach() {} }; class bird : public animal { public: unsigned int legs() const override; - ~bird() {}; }; class sparrow : public bird { public: std::wstring species() const override; - ~sparrow() {}; }; class spider : public animal { public: unsigned int legs() const override; - ~spider() {}; }; class tarantula : public spider { public: std::wstring species() const override; - ~tarantula() {}; }; class leg_counter