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
65 changes: 65 additions & 0 deletions exercise/01/animal.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
#include "animal.h"
unsigned insect::legs()
{
return 6u;
}

unsigned bird::legs()
{
return 2u;
}

unsigned spider::legs()
{
return 8u;
}

std::wstring cockroach::species()
{
return L"cockroach";
}

std::wstring sparrow::species()
{
return L"sparrow";
}

std::wstring tarantula::species()
{
return L"tarantula";
}

unsigned leg_counter::legs()
{
unsigned int sum=0;
std::list<animal*>::iterator itr = animals_.begin();
for (itr = animals_.begin(); itr != animals_.end(); ++itr)
{
sum += (*itr)->legs();
}
return sum;
}

std::wstring leg_counter::add_animal(animal* animal)
{

animals_.push_back(animal);
return animal->species();
}

animal* animal_factory(int animal)
{
switch (animal)
{
case animal_type::cockroach:
return new cockroach{};
case animal_type::tarantula:
return new tarantula{};
case animal_type::sparrow:
return new sparrow{};
}
}




61 changes: 61 additions & 0 deletions exercise/01/animal.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#pragma once
#include <string>
#include <list>

class animal
{
public:
virtual std::wstring species() = 0;
virtual unsigned int legs() = 0;

};

class insect : public animal
{
unsigned int legs() override;
};

class cockroach : public insect
{
std::wstring species() override;
};

class bird : public animal
{
unsigned int legs() override;
};

class sparrow : public bird
{
std::wstring species() override;
};

class spider : public animal
{
unsigned int legs() override;
};

class tarantula :public spider
{
std::wstring species() override;
};

class leg_counter
{
std::list<animal*> animals_;
public:
std::wstring add_animal(animal * animal);
unsigned int legs();
};

namespace animal_type
{
enum {
cockroach = 1,
sparrow,
tarantula
};
}

animal* animal_factory(int animal);

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