dynamic_cast vs static_cast , reinterpret_cast

reinterpret_cast 는 언제쓸까요

코드를 보겠습니다.

float f = 10.0f ;
int i = f ;

이런경우 경고가 뜨죠..
보통 이런경우 C스타일의 강제변환을 합니다.

-> int i = (int)f ;

방법이 틀리진 않았으나,
c++스타일대로 한다면,
비쥬얼스튜디오에서 추천하는 reinterpret_cast를 쓰면 됩니다.

=============================================================
dynamic_cast 와 static_cast는 언제쓸까요
우선 필요한 상황을 만들겠습니다.

Unit클래스를 상속받는 Enemy를 설계했다고 합시다.

경우1)
CEnemy* pEnemy;
CUnit* pUnit= (CUnit*)e ;
이런 상황은 문제없이 작동됩니다.
현재 경우가 c에서도 사용하고있구요.
이런 경우 static_cast와 동일합니다.

경우2)
CUnit* u ;
Enemy* pEnemy = (Enemy*)u ;
이런 상황에 c경우에도 문제가 발생하기때문에
static_cast와 dynamic_cast를 분리시켜 놓았을겁니다.
이런 경우
->Enemy* pEnemy = dynamic_cast<Enemy*>u ;
로 수정해주어야 겠지요.


어떻게 dynamic_cast에서 형변환여부를 어떻게 알수있을까요?
가상함수 테이블을 비교하는 것입니다.
가상함수의 내용이 같다면 부모클래스의 형태로 변환이 가능해지는 것이지요.




재미있게도, 경우1과 경우2에서는
static_cast로만으로도 가능합니다.
왜그럴까요..?

단일상속이라는 상황이기 때문입니다.

클래스 A◁-B◁-C 의 형태로 단일상속일 경우
포인터 위치->A
                    B
                    C
A, B, C의 클래스의 포인터 위치가 동일위치를 가리키고
부모 클래스는 가장 밑에 있에 있기때문에
접근이 가능해집니다.

다중상속일 경우를 보겠습니다.

A◁-C, B◁-C의 다중상속의 형태로
포인터 위치->A
                    B
                    C
되어있다면,
B클래스에서 접근할땐 상관이 없겠으나
A클래스에서 접근할때 문제가 생길 것입니다...

by 쪼꼬파이 | 2009/09/04 11:20 | C++ | 트랙백 | 덧글(0)

오픈소스 공부

http://www.cegui.org.uk

CEGUI,

너로 정했다~

by 쪼꼬파이 | 2009/09/03 16:11 | 오픈소스분석 | 트랙백 | 덧글(0)

Bitmap 공부한내용

Bitmap 구조 분석해서
로드 출력 하고

원하는 좌표에 RGB값 받아오거나 덮을수도 있고

반투명그리기
원하는 RGB값 빼서 그리기
해봄..

test.zip

by 쪼꼬파이 | 2009/09/02 17:02 | WINAPI | 트랙백 | 덧글(0)

◀ 이전 페이지다음 페이지 ▶