class Creature
{
public:
Creature() {}
virtual ~Creature() {}
public:
int _creatureId = 0;
};
class Player : public Creature
{
public:
Player() {}
virtual ~Player() {}
int GetHp() { return _hp; }
void SetHp(int hp) { _hp = hp; }
private:
int _hp = 100;
};
class Mage : public Player
{
public:
Mage() {}
virtual ~Mage() {}
private:
int _arrowCount = 10;
};
class Weapon
{
public:
Weapon() {}
~Weapon() {}
};
- C - Style Cast
- 의미 유지 및 원본 객체와 다른 비트열 재구성
int main()
{
// C-Style Cast - 의미 유지 및 원본 객체와 다른 비트열 재구성
Knight* knight = new Knight(); // 상속 관계에 있는 클래스간 변환
Creature* creature = (Knight*)knight;
}
- C++ - Style Cast
- static_cast - 타입 원칙에 비춰볼 때 상식적인 캐스팅만 허용
- int - float
- Creature, Knight - 상속구조
- dynamic_cast - 상속 관계에서의 안전 변환
- RTTI - Runtime Type Information
- const_cast - 포인터 또는 참조형의 const를 제거
- reinterpret_cast - 임의의 포인터 타입끼리 변환을 허용
int main()
{
int hp = 100;
int maxHp = 200;
// static_cast - 타입 원칙에 비춰볼 때 상식적인 캐스팅만 허용
float ratio = static_cast<float>(hp) / maxHp; // int - float
Player* player = new Player();
Creature* creature = static_cast<Player*>(player); // Creature - Knight
// dynamic_cast - 상속 관계에서의 안전 변환
Mage* mage = dynamic_cast<Mage*>(player);
// const_cast
const char* name = "Choi";
char* name2 = const_cast<char*>(name);
// reinterpret_cast
Player* player2 = new Player();
Weapon* weapon = reinterpret_cast<Weapon*>(player2);
}