From 953ded2f7eee93f52a00c96b36f1115b9056919c Mon Sep 17 00:00:00 2001 From: Dean Leibner Date: Wed, 14 Nov 2018 21:57:08 +0100 Subject: [PATCH] exercise 01 --- exercise/01/animal.cpp | 63 ++++++++++++++++++++++++++++++++++++++++ exercise/01/animal.h | 66 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 129 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..2cc64c7 --- /dev/null +++ b/exercise/01/animal.cpp @@ -0,0 +1,63 @@ +#include "animal.h" + +unsigned int insect::legs() const +{ + return 6u; +} + +std::wstring cockroach::species() const +{ + return L"cockroach"; +} + +unsigned bird::legs() const +{ + return 2u; +} + +std::wstring sparrow::species() const +{ + return L"sparrow"; +} + +unsigned int spider::legs() const +{ + return 8u; +} + +std::wstring tarantula::species() const +{ + return L"tarantula"; +} + +std::unique_ptr animal_factory(const int id) +{ + switch (id) + { + case cockroachId: + return std::make_unique(); + case sparrowId: + return std::make_unique(); + case tarantulaId: + return std::make_unique(); + default: + throw std::invalid_argument("Animal with id " + std::to_string(id) + " doesn't exist!"); + } +} + +leg_counter::leg_counter() : legCount(0) +{ +} + +unsigned int leg_counter::legs() const +{ + return legCount; +} + +std::wstring leg_counter::add_animal(const std::unique_ptr animal) +{ + legCount += animal->legs(); + + return animal->species(); +} + diff --git a/exercise/01/animal.h b/exercise/01/animal.h new file mode 100644 index 0000000..1a692e2 --- /dev/null +++ b/exercise/01/animal.h @@ -0,0 +1,66 @@ +#pragma once +#include + +class animal +{ +public: + virtual ~animal() = default; + virtual std::wstring species() const = 0; + virtual unsigned int legs() const = 0; +}; + +class insect : public animal +{ +public: + unsigned int legs() const override; +}; + +class cockroach : public insect +{ +public: + std::wstring species() const override; +}; + +class bird : public animal +{ +public: + unsigned int legs() const override; +}; + +class sparrow : public bird +{ +public: + std::wstring species() const override; +}; + +class spider : public animal +{ +public: + unsigned int legs() const override; +}; + +class tarantula : public spider +{ +public: + std::wstring species() const override; +}; + +class leg_counter +{ +public: + leg_counter(); + std::wstring add_animal(std::unique_ptr); + unsigned int legs() const; + +private: + unsigned int legCount; +}; + +std::unique_ptr animal_factory(int id); + +enum AnimalIds +{ + cockroachId = 1, + sparrowId = 2, + tarantulaId = 3 +};