1999.4.19 조경민
CRuntime 클래스는 MS에서 RTTI ( Real-Time Type Identificatin)
실시간으로 타입의 정보를 알려주는 기술인데요. ( 읽었던 책으로는
CRuntime으로 한 기술이 RTTI 보다 먼저 했다고 한거 같아요 )
그니까, 실행시간에 객체 자신이 누구인지 어떤 클래스로부터 상속받아
왔는지, 자기 자신에 대한 정보를 갖고 있는거예요..
( 이런 기술을 통해서 보다 나은 객체에 대한 정보를 디버깅시에 알수도
있어서 참 좋은데, 제가 알기로는 이런 실시간 타입 기술은 구현면에선
완전한 오버헤드에 해당한다고 합니다. )
CRuntime 클래스는 다음과 같은 중요한 몇가지가 있어요
LPCSTR m_lpszClassName 자기 클래스의 이름이예요
int m_nObjectSize 객체의 바이트 크기수
CRuntimeClass* m_pBaseClass 기초 클래스를 기억해요
CObject으로 CRuntime클래스를 접근하고 싶으면요
CRuntimeClass* pClass = RUNTIME_CLASS( CObject );
이렇게 하시면 돼요..
그리고 CObject::KindOf를 이용해도 되는데요
그러려면 쓰려는 객체는 CObject으로 부터 상속혹은 상속받은 클래스를
상속해야 하고 DECLARE_DYNAMIC ,IMPLEMENT_DYNAMIC, the DECLARE_DYNCREATE
IMPLEMENT_DYNCREATE, DECLARE_SERIAL and IMPLEMENT_SERIAL 같은 매크로를
이용해야 Runtime 기능을 쓸수 있어요
다음은 MSDN에 있는 설명 코드 예요
// in .H file
class CPerson : public CObject{
DECLARE_DYNAMIC( CPerson )
public:
CPerson(){}; // other declaration
};
// in .CPP file
IMPLEMENT_DYNAMIC( CPerson, CObject )
void SomeFunction(void){
CObject* pMyObject = new CPerson;
if(pMyObject->IsKindOf( RUNTIME_CLASS( CPerson ) ) ){
//if IsKindOf is true, then cast is all right
CPerson* pmyPerson = (CPerson*) pMyObject ;
...
delete pmyPerson;
}
...
delete [MyObject];
}
CRuntime 클래스는 MS에서 RTTI ( Real-Time Type Identificatin)
실시간으로 타입의 정보를 알려주는 기술인데요. ( 읽었던 책으로는
CRuntime으로 한 기술이 RTTI 보다 먼저 했다고 한거 같아요 )
그니까, 실행시간에 객체 자신이 누구인지 어떤 클래스로부터 상속받아
왔는지, 자기 자신에 대한 정보를 갖고 있는거예요..
( 이런 기술을 통해서 보다 나은 객체에 대한 정보를 디버깅시에 알수도
있어서 참 좋은데, 제가 알기로는 이런 실시간 타입 기술은 구현면에선
완전한 오버헤드에 해당한다고 합니다. )
CRuntime 클래스는 다음과 같은 중요한 몇가지가 있어요
LPCSTR m_lpszClassName 자기 클래스의 이름이예요
int m_nObjectSize 객체의 바이트 크기수
CRuntimeClass* m_pBaseClass 기초 클래스를 기억해요
CObject으로 CRuntime클래스를 접근하고 싶으면요
CRuntimeClass* pClass = RUNTIME_CLASS( CObject );
이렇게 하시면 돼요..
그리고 CObject::KindOf를 이용해도 되는데요
그러려면 쓰려는 객체는 CObject으로 부터 상속혹은 상속받은 클래스를
상속해야 하고 DECLARE_DYNAMIC ,IMPLEMENT_DYNAMIC, the DECLARE_DYNCREATE
IMPLEMENT_DYNCREATE, DECLARE_SERIAL and IMPLEMENT_SERIAL 같은 매크로를
이용해야 Runtime 기능을 쓸수 있어요
다음은 MSDN에 있는 설명 코드 예요
// in .H file
class CPerson : public CObject{
DECLARE_DYNAMIC( CPerson )
public:
CPerson(){}; // other declaration
};
// in .CPP file
IMPLEMENT_DYNAMIC( CPerson, CObject )
void SomeFunction(void){
CObject* pMyObject = new CPerson;
if(pMyObject->IsKindOf( RUNTIME_CLASS( CPerson ) ) ){
//if IsKindOf is true, then cast is all right
CPerson* pmyPerson = (CPerson*) pMyObject ;
...
delete pmyPerson;
}
...
delete [MyObject];
}
'KB > MFC/Win32' 카테고리의 다른 글
[ActiveX] 엑티브 컨트롤 웹 페이지 만들기 (0) | 2004.03.19 |
---|---|
[mfc] 에디트 컨트롤 fix 폰트 쓰기 (0) | 2004.03.19 |
[개요] 윈도우프로그래밍 (0) | 2004.03.19 |
윈도우프로그래밍 간략설명 (0) | 2004.03.19 |
언리쉬드 9장 윈도우 다이얼로그 박스 컨트롤 (0) | 2004.03.19 |