티스토리 뷰
목차
기본적인 자료형 변환 형태는 DYNAMIC_DOWNCAST (Class, Pointer)입니다. 클래스 등 형 변환이 정상적으로 이루어질 경우 해당 오브젝트의 포인터를 반환하고, 그렇지 않다면 NULL을 반환합니다.
아래는 간단한 type casting 예제 3개입니다.
C++ 캐스팅 자료형 변환 예 1)
1 2 3 | CFrameWnd* pParent; CWnd* pNaturalParent = pPrintView->GetParentFrame(); pParent = DYNAMIC_DOWNCAST(CFrameWnd, pNaturalParent); | cs |
C++ 캐스팅 자료형 변환 예 2)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | class X:public CObject { public: int x; DECLARE_DYNCREATE(X) }; IMPLEMENT_DYNCREATE(X, CObject) class Y:public X { public: int y; DECLARE_DYNCREATE(Y) }; IMPLEMENT_DYNCREATE(Y, X) Y* pY=new Y; X* pX=DYNAMIC_DOWNCAST(X, pY); delete pY; | cs |
C++ 캐스팅 자료형 변환 예 3)
1 2 3 4 | CMDIFrame-xWnd* pFrame; pFrame = DYNAMIC_DOWNCAST(CMDIFrame-xWnd, AfxGetMainWnd()); pFrame = (CMDIFrame-xWnd*) AfxGetMainWnd(); // () 안에 캐스팅 타입을 선언 | cs |
또한, 다른 예를 들어, XXX *pointer를 선언하여 실제 값을 얻고 싶다면 아래처럼 사용하시면 됩니다.
1 | A* p = DYNAMIC_DOWNCAST(A, pointer); | cs |
정상적으로 C++ 자료형 변환이 이뤄지면 변환 객체의 포인터를 얻게 되지만, 실패할 경우 NULL을 얻게 됩니다.
그리고 하나 더 살펴볼 것은, CRuntimeClass와 IsKindOf의 관계입니다.
MFC에서 동적으로 사용되는 클래스를 위한 것으로 타겟 클래스의 변수로 인스턴스를 올바르게 가리키는지 확인하는 데 꼭 필요합니다.
type casting 예제
아래는 동적으로 클래스 객체를 캐스팅하여 반환하는 예입니다.
1 2 3 | BOOL CObject::IsKindOf( const CRuntimeClass* pClass ) const; | cs |
CFramwWnd에 클래스를 생성하는 경우, 사용자가 선언한 멤버 함수에 이를 대입하기 위해서 CRuntimeClass가 사용됩니다.
아래는 더욱 더 상세한 type casting C++ 예제입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #include <afxwin.h> class Type1: public CObject {}; // CObject에서 파생 class Type2: public CFrameWnd {}; // CFrameWnd에서 파생 BOOL IsType1(CObject *pFrameWnd) // 확인 함수 { return pFrameWnd->IsKindOf(RUNTIME_CLASS(CFrameWnd)); } BOOL IsType2(CObject *pObject) { return pObject->IsKindOf(RUNTIME_CLASS(CObject)); } int main() { Type1 t1; Type2 t2; ASSERT(IsType1(&t1) == FALSE); ASSERT(IsType1(&t2) == TRUE); ASSERT(IsType2(&t1) == TRUE); ASSERT(IsType2(&t2) == TRUE); return 0; } | cs |
type casting 예제
관련 글
▷ MFC 멀티바이트 유니코드 변환, Char <-> CString 형변환
▷ strchr, strrchr, strstr, strtok 멀티바이트 함수, 유니코드 변환
▷ C# string double 변환 7가지 방법과 재밌는 예제 소스 1개
ⓒ written by vicddory