객체를 다룰 때, 기능을 명시한 최상위 클래스로 관리하는 것이 편의성에 용이하다.
enum PLAYER_TYPE
{
KNIGHT,
MAGE
};
class Player {
public:
virtual ~Player() {}
int _type;
};
class Knight : public Player {
public:
Knight() { _type = KNIGHT; cout << "생성자" << endl; }
~Knight() { cout << "소멸자" << endl; }
int32 _hp = 100;
};
class Mage : public Player {
public:
Mage() { _type = MAGE; }
};
void AttackPlayer(Player* player)
{
}
int main()
{
Player* p1 = new Knight();
Player* p2 = new Mage();
}
하지만 이런 경우에서도 하위 클래스로 캐스팅이 필요한 경우가 존재한다.
Knight* k1 = dynamic_cast<Knight*>(p1);
if (p1->_type == KNIGHT)
{
//Knight* k1 = (Knight*)p1;
Knight* k1 = static_cast<Knight*>(p1);
}
캐스팅하는 클래스의 구조가 다르다거나 멤버변수가 맞지 않다면 에러가 발생한다.
dynamic_cast의 경우에는 해당 조건에서 NULL을 반환하지만, static_cast에 비해 성능이 많이 떨어진다.
커스텀 코드)
https://github.com/Juzdalua/Study-Cpp-Server/blob/master/ServerCore/TypeCast.h
Study-Cpp-Server/ServerCore/TypeCast.h at master · Juzdalua/Study-Cpp-Server
Study C++ IOCP. Contribute to Juzdalua/Study-Cpp-Server development by creating an account on GitHub.
github.com
'Server > C++' 카테고리의 다른 글
TCP vs UDP (0) | 2024.08.06 |
---|---|
TCP 소켓 프로그래밍 (0) | 2024.08.06 |
메모리 풀링 (0) | 2024.08.05 |
STL Allocator (0) | 2024.08.05 |
메모리 오염과 Stomp Allocator (0) | 2024.08.05 |