convert 이름의 프로그램을 만들어라.
int : 0, -42, 42...
float : 0.0f, -4.2f, 4.2f... 그리고 +inff, -inff, nanf
double : 0.0, -4.2, 4.2... 그리고 +inf, -inf, nan
test
uintptr_t serialize(Data ptr);
Data deserialize(uintptr_t raw);
두 메서드를 구현하는데 말 그대로 Data 클래스를 uintptr_t로 변환하고
반대로 만드는 것이 프로젝트 목표이다.
uintptr_t 형은 void포인터 에서 변환된 값을 보유 하고 원래 포인터와 동일한 값으로 해당 유형으로 다시 변환할 수 있는 정수 유형이다.
형변환은 reinterpret_cast을 통해 가능하다.
일종의 void 포인터 형으로 주소값은 그대로 보유함을 보여주면 된다.
Base* generate(void);
void identify(Base* p);
void identify(Base& p);
Base 부모클래스가 있고 이를 상속받는 A, B, C 클래스가 있다. generate 메서드는 이 세 클래스중에 랜덤으로 한 클래스를 Base 부모클래스로 받아 리턴시키는 메서드이다.
identify는 매개변수 p가 어느 A, B, C중 어느 클래스인지 찾고 이를 알리는 메서드이다. 그리고 typeinfo를 금지했으므로 일반적인 방법으로는 A, B, C중 어느 클래스인지 알기 어렵다.
다운 캐스팅을 이용하면 해결할 수 있다. 쉽게말해 현재 Base 부모 클래스로 정의된 인스턴스를 다운 캐스팅하여 A, B, C 클래스인지 확인하는 작업을 진행하면 된다.
dynamic_cast 를 사용하면 된다.