- const_cast : 상수성을 제거하는데 사용합니다.
const int* pconstint = new int (10);
int *pint = const_cast<int*>(pconstint);
pint = 20;
위와 같이 pint는 상수성이 제거되면서 대상값을 아무 제약없이 변경할 수 있습니다. (포인터 상수만)
- dynamic_cast : 상속관계 안에서 포인터나 참조자의 타입을 기본클래스에서 파생클래스로 다운캐스팅과
다중상속에서 기본클래스간의 안전한 타입캐스팅에 사용합니다.
class A {...};
class B : public A { ... }
A *pBase = new A;
A *pParent = new B;
B *pP = new B;
//pParent = pBase;
pParent = dynamic_cast<B*>( pBase );
//pP = pParent;
pP = dynamic_cast<B*>( pParent );
위에서 주석처리 된 부분은 컴파일 에러가 나는 부분입니다.
위와 같이 다이나믹 캐스트는 안전하게 부모 클래스에서 파생클래스로 다운캐스팅을 해줍니다.
- static_cast : 가장 기본적인 캐스팅입니다.
실수, 정수, 열거형 등 우리가 기본적으로 사용하는 캐스팅이지만 C언어 형태처럼 만능으로
뭐든지 변환하지는 못하고 약간의 제약사항등이 있습니다.
(예: 서로 다른 타입의 포인터 간의 타입 변환)
- reinterpret_cast : 위 3가지 캐스트가 하지 못하는 잡다한 모든 캐스팅을 합니다.
단, 상수형(const) 만은 제거하지 못합니다.
클래스간에 상속관계가 성립되지 않거나 전혀 타입이 다른 어떠한 객체들,,,,,
전혀 상관이 없는 변수간의 타입변환을 수행할 수 있습니다.
위의 4가지 캐스팅을 모두 묶은 것이 a = (타입)b; 의 c언어 캐스팅입니다.
그만큼 사용에 제약사항이 없는 대신에 잘못사용해서 실수로 빚어지는 프로그램상의 런타임 에러는
크다는 거지요~~
'프로그래밍 > VC++ 개발 코딩' 카테고리의 다른 글
Make file for window (0) | 2014.01.17 |
---|---|
Big vs Little Endian 설명 (0) | 2014.01.17 |
Enum과 bit연산 (0) | 2014.01.17 |
[링크스크랩] [C++] stl vector 사용법 (0) | 2014.01.17 |
ActiveX(*.ocx)로 ocx Component 만들기 (0) | 2014.01.17 |