From e876bad1215eac206bd997b7851c2a7175ee4ae5 Mon Sep 17 00:00:00 2001 From: maja Date: Thu, 15 Nov 2018 00:18:45 +0100 Subject: [PATCH 1/2] Added exercise 1 of the third day --- exercise/01/animal.cpp | 73 ++++++++++++++++++++++++++++++++ exercise/01/animal.h | 57 +++++++++++++++++++++++++ exercise/01/animals.vcxproj | 6 +-- exercise/01/animals.vcxproj.user | 4 ++ 4 files changed, 137 insertions(+), 3 deletions(-) create mode 100644 exercise/01/animal.cpp create mode 100644 exercise/01/animal.h create mode 100644 exercise/01/animals.vcxproj.user diff --git a/exercise/01/animal.cpp b/exercise/01/animal.cpp new file mode 100644 index 0000000..60adba8 --- /dev/null +++ b/exercise/01/animal.cpp @@ -0,0 +1,73 @@ +#include "animal.h" + +std::wstring cockroach::species() +{ + return L"cockroach"; +} + +unsigned int cockroach::legs() +{ + return 6u; +} + +cockroach::~cockroach(){ } + +std::wstring sparrow::species() +{ + return L"sparrow"; +} + +unsigned int sparrow::legs() +{ + return 2u; +} + +sparrow::~sparrow(){ } + +std::wstring tarantula::species() +{ + return L"tarantula"; +} + +unsigned int tarantula::legs() +{ + return 8u; +} + +tarantula::~tarantula() { } + + +animal_factory::animal_factory(int id) +{ + this->id = id; + create_animal(); +} + +animal* animal_factory::create_animal() +{ + switch (id) + { + case 1: return new cockroach; + break; + case 2: return new sparrow; + break; + case 3: return new tarantula; + break; + default: return nullptr; + break; + } +} + +std::wstring leg_counter::add_animal(animal_factory& af) +{ + animal* a = af.create_animal(); + counter += a->legs(); + std::wstring species = a->species(); + delete a; + return species; +} + +unsigned int leg_counter::legs() +{ + return counter; +} \ No newline at end of file diff --git a/exercise/01/animal.h b/exercise/01/animal.h new file mode 100644 index 0000000..cc24e04 --- /dev/null +++ b/exercise/01/animal.h @@ -0,0 +1,57 @@ +#pragma once +#include + +class animal +{ +public: + virtual std::wstring species() = 0; + virtual unsigned int legs() = 0; + virtual ~animal() {}; +}; + +class insect : public animal {}; + +class cockroach : public insect +{ + std::wstring species() override; + unsigned int legs() override; +public: + ~cockroach(); +}; + +class bird : public animal { }; + +class sparrow : public bird +{ + std::wstring species() override; + unsigned int legs() override; +public: + ~sparrow(); +}; + +class spider : public animal {}; + +class tarantula : public spider +{ + std::wstring species() override; + unsigned int legs() override; +public: + ~tarantula(); +}; + +class animal_factory +{ +public: + animal_factory(int id); + animal* create_animal(); +private: + int id; +}; + +class leg_counter +{ + unsigned int counter = 0; +public: + std::wstring add_animal(animal_factory&); + unsigned int legs(); +}; diff --git a/exercise/01/animals.vcxproj b/exercise/01/animals.vcxproj index 0c14cbf..42f52e7 100644 --- a/exercise/01/animals.vcxproj +++ b/exercise/01/animals.vcxproj @@ -82,13 +82,13 @@ $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories) - - - + + + diff --git a/exercise/01/animals.vcxproj.user b/exercise/01/animals.vcxproj.user new file mode 100644 index 0000000..be25078 --- /dev/null +++ b/exercise/01/animals.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file From 60c1f137666e4a2de865fc4688a2be426063ea3c Mon Sep 17 00:00:00 2001 From: maja Date: Thu, 15 Nov 2018 09:09:13 +0100 Subject: [PATCH 2/2] added some consts --- exercise/01/animal.cpp | 16 ++++++++-------- exercise/01/animal.h | 20 ++++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/exercise/01/animal.cpp b/exercise/01/animal.cpp index 60adba8..f55a8ab 100644 --- a/exercise/01/animal.cpp +++ b/exercise/01/animal.cpp @@ -1,35 +1,35 @@ #include "animal.h" -std::wstring cockroach::species() +std::wstring cockroach::species() const { return L"cockroach"; } -unsigned int cockroach::legs() +unsigned int cockroach::legs() const { return 6u; } cockroach::~cockroach(){ } -std::wstring sparrow::species() +std::wstring sparrow::species() const { return L"sparrow"; } -unsigned int sparrow::legs() +unsigned int sparrow::legs() const { return 2u; } sparrow::~sparrow(){ } -std::wstring tarantula::species() +std::wstring tarantula::species() const { return L"tarantula"; } -unsigned int tarantula::legs() +unsigned int tarantula::legs() const { return 8u; } @@ -43,7 +43,7 @@ animal_factory::animal_factory(int id) create_animal(); } -animal* animal_factory::create_animal() +animal* animal_factory::create_animal() const { switch (id) { @@ -67,7 +67,7 @@ std::wstring leg_counter::add_animal(animal_factory& af) return species; } -unsigned int leg_counter::legs() +unsigned int leg_counter::legs() const { return counter; } \ No newline at end of file diff --git a/exercise/01/animal.h b/exercise/01/animal.h index cc24e04..558c756 100644 --- a/exercise/01/animal.h +++ b/exercise/01/animal.h @@ -4,8 +4,8 @@ class animal { public: - virtual std::wstring species() = 0; - virtual unsigned int legs() = 0; + virtual std::wstring species() const = 0; + virtual unsigned int legs() const= 0; virtual ~animal() {}; }; @@ -13,8 +13,8 @@ class insect : public animal {}; class cockroach : public insect { - std::wstring species() override; - unsigned int legs() override; + std::wstring species() const override; + unsigned int legs() const override; public: ~cockroach(); }; @@ -23,8 +23,8 @@ class bird : public animal { }; class sparrow : public bird { - std::wstring species() override; - unsigned int legs() override; + std::wstring species() const override; + unsigned int legs() const override; public: ~sparrow(); }; @@ -33,8 +33,8 @@ class spider : public animal {}; class tarantula : public spider { - std::wstring species() override; - unsigned int legs() override; + std::wstring species() const override; + unsigned int legs() const override; public: ~tarantula(); }; @@ -43,7 +43,7 @@ class animal_factory { public: animal_factory(int id); - animal* create_animal(); + animal* create_animal() const; private: int id; }; @@ -53,5 +53,5 @@ class leg_counter unsigned int counter = 0; public: std::wstring add_animal(animal_factory&); - unsigned int legs(); + unsigned int legs() const; };