diff --git a/exercise/01/animal.cpp b/exercise/01/animal.cpp new file mode 100644 index 0000000..3d871f6 --- /dev/null +++ b/exercise/01/animal.cpp @@ -0,0 +1,57 @@ + +#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 std::unique_ptr NewAnimal) +{ + m_lLegCount += NewAnimal->legs(); + return NewAnimal->species(); +} + + +const unsigned int leg_counter::legs() +{ + return m_lLegCount; +} + diff --git a/exercise/01/animal.h b/exercise/01/animal.h new file mode 100644 index 0000000..9b746b5 --- /dev/null +++ b/exercise/01/animal.h @@ -0,0 +1,126 @@ +#pragma once + +#include + + +class animal +{ +public: + virtual ~animal() = default; + + virtual unsigned int legs() const = 0; + virtual std::wstring species() 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; +}; + + + +////////////////////////////////////////////////// +enum animalID +{ + eCockroach = 1, + eSparrow, + eTarantula +}; + + +namespace +{ + using namespace std; + + unique_ptr animal_factory(int id) + { + switch (id) + { + case eCockroach: + { + return make_unique(); + } + + case eSparrow: + { + return make_unique(); + } + + case eTarantula: + { + return make_unique(); + } + + default: + { + return nullptr; + } + } + } +} + + +////////////////////////////////////////////////// +class leg_counter +{ +public: + leg_counter() : m_lLegCount(0) {}; + ~leg_counter() = default; + + std::wstring add_animal(const std::unique_ptr NewAnimal); + const unsigned int legs(); + +private: + unsigned int m_lLegCount; +}; + + diff --git a/exercise/01/animals.vcxproj b/exercise/01/animals.vcxproj index 0c14cbf..b6ae702 100644 --- a/exercise/01/animals.vcxproj +++ b/exercise/01/animals.vcxproj @@ -1,95 +1,96 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - {BB15329E-10D8-4740-94BC-64C50BA4EE12} - Win32Proj - array - 10.0.17134.0 - - - - DynamicLibrary - true - v141 - Unicode - false - - - DynamicLibrary - false - v141 - true - Unicode - false - - - - - - - - - - - - - true - - - true - - - - NotUsing - Level3 - Disabled - $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;%(PreprocessorDefinitions) - true - - - Windows - true - $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories) - - - - - Level3 - NotUsing - MaxSpeed - true - true - $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;%(PreprocessorDefinitions) - true - - - Windows - true - true - true - $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories) - - - - - - - - - - - - + + + + + Debug + Win32 + + + Release + Win32 + + + + {BB15329E-10D8-4740-94BC-64C50BA4EE12} + Win32Proj + array + 10.0.17134.0 + + + + DynamicLibrary + true + v141 + Unicode + false + + + DynamicLibrary + false + v141 + true + Unicode + false + false + + + + + + + + + + + + + true + + + true + + + + NotUsing + Level3 + Disabled + $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;%(PreprocessorDefinitions) + true + + + Windows + true + $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories) + + + + + Level3 + NotUsing + MaxSpeed + true + true + $(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;%(PreprocessorDefinitions) + true + + + Windows + true + true + true + $(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories) + + + + + + + + + + + + \ No newline at end of file diff --git a/exercise/01/animals.vcxproj.filters b/exercise/01/animals.vcxproj.filters index ad4d9ab..07fc409 100644 --- a/exercise/01/animals.vcxproj.filters +++ b/exercise/01/animals.vcxproj.filters @@ -1,24 +1,24 @@ - - - - - {f2ada0ee-91e7-4bbd-b33d-837567340243} - - - {3cc0fd48-6585-4969-94bd-406daa5f786b} - - - - - test - - - src - - - - - src - - + + + + + {f2ada0ee-91e7-4bbd-b33d-837567340243} + + + {3cc0fd48-6585-4969-94bd-406daa5f786b} + + + + + test + + + src + + + + + src + + \ No newline at end of file