Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions exercise/01/animal.cpp
Original file line number Diff line number Diff line change
@@ -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;
}
57 changes: 57 additions & 0 deletions exercise/01/animal.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#pragma once
#include <string>

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;
};
6 changes: 3 additions & 3 deletions exercise/01/animals.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -82,13 +82,13 @@
<AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="animal.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="animal.cpp" />
<ClCompile Include="test.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="animal.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
Expand Down
4 changes: 4 additions & 0 deletions exercise/01/animals.vcxproj.user
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>