add casts
add inline add template
This commit is contained in:
@@ -180,12 +180,14 @@
|
||||
<ClCompile Include="main.cpp" />
|
||||
<ClCompile Include="Monster.cpp" />
|
||||
<ClCompile Include="Ork.cpp" />
|
||||
<ClCompile Include="Troll.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="Entity.h" />
|
||||
<ClInclude Include="ICompareable.h" />
|
||||
<ClInclude Include="Monster.h" />
|
||||
<ClInclude Include="Ork.h" />
|
||||
<ClInclude Include="Troll.h" />
|
||||
<ClInclude Include="Vector3.h" />
|
||||
<ClInclude Include="Weapon.h" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -27,6 +27,9 @@
|
||||
<ClCompile Include="Ork.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Troll.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="Entity.h">
|
||||
@@ -47,5 +50,8 @@
|
||||
<ClInclude Include="Weapon.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Troll.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -8,8 +8,8 @@ public:
|
||||
Entity(std::string name);
|
||||
|
||||
virtual std::string toString() { return "Entity"; } // declared & defined, only use that for one liners
|
||||
std::string getName() { return _name; }
|
||||
void setName(std::string name) { _name = name; }
|
||||
const std::string& getName() const { return _name; }
|
||||
void setName(const std::string& name) { _name = name; }
|
||||
|
||||
protected:
|
||||
std::string _name = "";
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
#include "Troll.h"
|
||||
|
||||
void Troll::Move(Vector3 move)
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
#pragma once
|
||||
#include "Monster.h"
|
||||
|
||||
class Troll : public Monster
|
||||
{
|
||||
std::string toString() override { return "Troll"; }
|
||||
|
||||
// Inherited via Monster
|
||||
void Move(Vector3 move) override;
|
||||
};
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "Vector3.h"
|
||||
#include "ICompareable.h"
|
||||
#include "Ork.h"
|
||||
#include "Troll.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
@@ -45,5 +46,57 @@ int main()
|
||||
|
||||
Ork ork2 = ork; // should be a individual instances with their own values and weapons
|
||||
|
||||
// casts
|
||||
// c cast
|
||||
int number = -10000000;
|
||||
unsigned short smallPositiveNumber = (unsigned short)number;
|
||||
int* pNumber = &number;
|
||||
unsigned short* pSmallPositiveNumber = (unsigned short*)pNumber;
|
||||
float fNumber = (float)number;
|
||||
float* pFNumber = (float*)pNumber;
|
||||
int* pNumbers = new int[10];
|
||||
void** ppVoids = (void**)&pNumbers;
|
||||
Monster* pMonster = new Ork();
|
||||
Ork* pOrk = (Ork*)pMonster;
|
||||
std::string toString = pOrk->toString();
|
||||
|
||||
// static_cast
|
||||
smallPositiveNumber = static_cast<unsigned short>(number);
|
||||
//pSmallPositiveNumber = static_cast<unsigned short*>(pNumber);
|
||||
fNumber = static_cast<float>(number);
|
||||
//pFNumber = static_cast<float*>(pNumber);
|
||||
//ppVoids = static_cast<void**>(&pNumbers);
|
||||
pOrk = static_cast<Ork*>(pMonster);
|
||||
//Weapon* weapon = static_cast<Weapon*>(pMonster);
|
||||
Monster* pMonster2 = new Troll();
|
||||
pOrk = static_cast<Ork*>(pMonster2); // is running, but it is not the same type
|
||||
toString = pOrk->toString();
|
||||
|
||||
// dynamic cast
|
||||
pOrk = dynamic_cast<Ork*>(pMonster2); // better use for polymorphic cast, because of runtime check
|
||||
//toString = pOrk->toString();
|
||||
|
||||
// reinterpret cast
|
||||
//smallPositiveNumber = reinterpret_cast<unsigned short>(number);
|
||||
pSmallPositiveNumber = reinterpret_cast<unsigned short*>(pNumber);
|
||||
pFNumber = reinterpret_cast<float*>(pNumber);
|
||||
|
||||
// const cast
|
||||
const char* sz = "Test";
|
||||
//char* sz2 = sz;
|
||||
char* sz2 = const_cast<char*>(sz);
|
||||
|
||||
const std::string str = "Test";
|
||||
std::string str2 = str;
|
||||
str.c_str(); // if you need a zero terminated string
|
||||
|
||||
delete[] pNumbers;
|
||||
pNumbers = nullptr;
|
||||
delete pMonster;
|
||||
pMonster = nullptr;
|
||||
pOrk = nullptr;
|
||||
delete pMonster2;
|
||||
pMonster2 = nullptr;
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user