diff --git a/exercise/01/animal.cpp b/exercise/01/animal.cpp new file mode 100644 index 0000000..b581a6f --- /dev/null +++ b/exercise/01/animal.cpp @@ -0,0 +1,65 @@ +#include "animal.h" + +unsigned insect::legs() const +{ + return legCount; +} + +std::wstring cockroach::species() const +{ + return speciesName; +} + +unsigned bird::legs() const +{ + return legCount; + +} + +std::wstring sparrow::species() const +{ + return speciesName; +} + +unsigned spider::legs() const +{ + return legCount; + +} + +std::wstring tarantula::species() const +{ + return speciesName; +} + +std::wstring leg_counter::add_animal(std::unique_ptr animal) +{ + animalCount += animal->legs(); + return animal->species(); +} + +unsigned leg_counter::legs() const +{ + return animalCount; +} + + +enum Animals { Cockroach = 1, Sparrow = 2, Tarantula = 3 }; + +std::unique_ptr animal_factory(int num) +{ + if (num == Animals::Cockroach) + { + return std::make_unique(); + } + if (num == Animals::Sparrow) + { + return std::make_unique(); + } + if (num == Animals::Tarantula) + { + return std::make_unique(); + } + + return nullptr; +} \ No newline at end of file diff --git a/exercise/01/animal.h b/exercise/01/animal.h new file mode 100644 index 0000000..1ca3dce --- /dev/null +++ b/exercise/01/animal.h @@ -0,0 +1,69 @@ +#pragma once +#include + +class animal +{ +public: + virtual ~animal() = default; + virtual std::wstring species() const = 0; + virtual unsigned legs() const = 0; +}; + +class insect : public animal +{ +public: + unsigned legs() const override; +protected: + static const unsigned legCount = 6; +}; + +class cockroach : public insect +{ +public: + std::wstring species() const override; +protected: + const std::wstring speciesName = L"cockroach"; +}; + +class bird : public animal +{ +public: + unsigned legs() const override; +protected: + static const unsigned legCount = 2; +}; + +class sparrow : public bird +{ +public: + std::wstring species() const override; +protected: + const std::wstring speciesName = L"sparrow"; +}; + +class spider : public animal +{ +public: + unsigned legs() const override; +protected: + static const unsigned legCount = 8; +}; + +class tarantula : public spider +{ +public: + std::wstring species() const override; +protected: + const std::wstring speciesName = L"tarantula"; +}; + +class leg_counter +{ +public: + std::wstring add_animal(std::unique_ptr); + unsigned legs() const; +private: + unsigned animalCount = 0; +}; + +std::unique_ptr animal_factory(int num); \ No newline at end of file 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.filters b/exercise/01/animals.vcxproj.filters index ad4d9ab..d9e01c3 100644 --- a/exercise/01/animals.vcxproj.filters +++ b/exercise/01/animals.vcxproj.filters @@ -1,24 +1,20 @@  - - {f2ada0ee-91e7-4bbd-b33d-837567340243} - {3cc0fd48-6585-4969-94bd-406daa5f786b} + + {5bbc7edf-5c58-4e05-91a8-f558bea5d453} + test - - src - + - - src - + \ No newline at end of file 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