C++ Casting
조경민 오전 1:54 2001-05-03
=-=======================================
dynamic, static은 클래스 hirachy cast에 쓰이는데
dynamic_cast는 변환 불가하면 zero로 세팅하고
static_cast는 변환불가시 assert 에러가 떨어진다.
CSon* lpSon = (CSon*)lpBase;
=>
CSon* lpSon = dynamic_cast<CSon*>(lpBase);
if( lpSon != NULL )
lpSon->fnSon();
*downcast시 알맞지 않으면 lpSon == NULL이 된다.
*ambiguass 한 캐스트시 에러가난다.
*cross cast에 쓰일수 있다.
[A] [A]
| |
[B] [C] [D]
+---+---+
|
[E]
void f(D* pd)
{
E* pe = dynamic_cast<E*>(pd);
B* pb = pe; // upcast , implicit conversion
A* pa = pb; // "
}
void f(D* pd)
{
B* pb = dynamic_cast<B*>(pd); // cross cast
A* pa = pb; // upcast implicit 가능
}
---------------------------------------------------------
CBase* lpBase = (CBase*)lpSon;
=>
CBase* lpBase = static_cast<CBase*>(lpSon);
// 만일 lpBase가 실제 base가 아니면 컴파일타임에러가남
이외의 것
reinterpreted_cast<>를 쓴다.
조경민 오전 1:54 2001-05-03
=-=======================================
dynamic, static은 클래스 hirachy cast에 쓰이는데
dynamic_cast는 변환 불가하면 zero로 세팅하고
static_cast는 변환불가시 assert 에러가 떨어진다.
CSon* lpSon = (CSon*)lpBase;
=>
CSon* lpSon = dynamic_cast<CSon*>(lpBase);
if( lpSon != NULL )
lpSon->fnSon();
*downcast시 알맞지 않으면 lpSon == NULL이 된다.
*ambiguass 한 캐스트시 에러가난다.
*cross cast에 쓰일수 있다.
[A] [A]
| |
[B] [C] [D]
+---+---+
|
[E]
void f(D* pd)
{
E* pe = dynamic_cast<E*>(pd);
B* pb = pe; // upcast , implicit conversion
A* pa = pb; // "
}
void f(D* pd)
{
B* pb = dynamic_cast<B*>(pd); // cross cast
A* pa = pb; // upcast implicit 가능
}
---------------------------------------------------------
CBase* lpBase = (CBase*)lpSon;
=>
CBase* lpBase = static_cast<CBase*>(lpSon);
// 만일 lpBase가 실제 base가 아니면 컴파일타임에러가남
이외의 것
reinterpreted_cast<>를 쓴다.
'KB > C/C++' 카테고리의 다른 글
[펌] C++ Reverse Disassembly (0) | 2004.09.10 |
---|---|
[stl] 소트 하기 (0) | 2004.03.19 |
[stl] STL List를 사용하기 (0) | 2004.03.19 |
[stl] 이중배열 만들기 vector (0) | 2004.03.19 |
STL String (0) | 2004.03.19 |