diff --git a/exercise/01/animal.cpp b/exercise/01/animal.cpp new file mode 100644 index 0000000..f55a8ab --- /dev/null +++ b/exercise/01/animal.cpp @@ -0,0 +1,73 @@ +#include "animal.h" + +std::wstring cockroach::species() const +{ + return L"cockroach"; +} + +unsigned int cockroach::legs() const +{ + return 6u; +} + +cockroach::~cockroach(){ } + +std::wstring sparrow::species() const +{ + return L"sparrow"; +} + +unsigned int sparrow::legs() const +{ + return 2u; +} + +sparrow::~sparrow(){ } + +std::wstring tarantula::species() const +{ + return L"tarantula"; +} + +unsigned int tarantula::legs() const +{ + return 8u; +} + +tarantula::~tarantula() { } + + +animal_factory::animal_factory(int id) +{ + this->id = id; + create_animal(); +} + +animal* animal_factory::create_animal() const +{ + 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() const +{ + 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..558c756 --- /dev/null +++ b/exercise/01/animal.h @@ -0,0 +1,57 @@ +#pragma once +#include + +class animal +{ +public: + virtual std::wstring species() const = 0; + virtual unsigned int legs() const= 0; + virtual ~animal() {}; +}; + +class insect : public animal {}; + +class cockroach : public insect +{ + std::wstring species() const override; + unsigned int legs() const override; +public: + ~cockroach(); +}; + +class bird : public animal { }; + +class sparrow : public bird +{ + std::wstring species() const override; + unsigned int legs() const override; +public: + ~sparrow(); +}; + +class spider : public animal {}; + +class tarantula : public spider +{ + std::wstring species() const override; + unsigned int legs() const override; +public: + ~tarantula(); +}; + +class animal_factory +{ +public: + animal_factory(int id); + animal* create_animal() const; +private: + int id; +}; + +class leg_counter +{ + unsigned int counter = 0; +public: + std::wstring add_animal(animal_factory&); + unsigned int legs() const; +}; 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