런타임 클래스 정보 액세스
이 문서에서는 런타임에 개체 클래스 정보에 액세스 하는 방법을 설명 합니다.
[!참고]
MFC를 사용 하지 않습니다를 런타임 형식 정보 (RTTI) 지원이 Visual C++ 4.0에서 도입 되었습니다.
클래스에서 파생 된 경우 CObject 사용의 DECLARE_동적 및 IMPLEMENT_DYNAMIC, DECLARE_DYNCREATE 및 IMPLEMENT_DYNCREATE, 또는 DECLARE_SERIAL 및 IMPLEMENT_SERIAL 매크로 문서에서 설명한 Cobject에서 클래스를 파생, CObject 클래스는 런타임에 개체의 정확한 클래스를 결정할 수 있습니다.
이 기능이 필요한 검사 함수 인수의 추가 형식 및 개체의 클래스를 기반으로 하는 특수 한 목적의 코드를 작성 해야 하는 경우에 가장 유용 합니다.그러나 기능과 가상 함수 때문에이 방법은 일반적으로 권장 되지 않습니다.
CObject 멤버 함수 IsKindOf 사용 하 여 특정 개체를 지정 된 클래스에 속해 있거나 특정 클래스에서 파생 된 경우 확인할 수 있습니다.인수를 IsKindOf 되는 CRuntimeClass 개체를 사용 하 여 얻을 수 있습니다의 RUNTIME_CLASS 클래스의 이름 가진 매크로.
RUNTIME_CLASS 매크로 사용 하려면
사용 RUNTIME_CLASS 클래스에 대 한 그림과 같이 클래스의 이름을 가진 CObject:
CRuntimeClass* pClass = RUNTIME_CLASS( CObject );
거의 런타임 클래스 개체에 직접 액세스 해야 합니다.런타임 클래스 개체에 전달 하는 것이 보다 일반적인 사용의 IsKindOf 다음 절차에 나와 있는 것 처럼 작동 합니다.IsKindOf 함수 테스트 개체는 특정 클래스에 속하는지 확인 합니다.
IsKindOf 함수를 사용.
클래스가 런타임 클래스를 지원 하는지 확인 하십시오.즉, 클래스에서 직접 또는 간접적으로에서 파생 된 해야 CObject 및 사용의 DECLARE_동적 및 IMPLEMENT_DYNAMIC, DECLARE_DYNCREATE 및 IMPLEMENT_DYNCREATE, 또는 DECLARE_SERIAL 및 IMPLEMENT_SERIAL 매크로 문서에서 설명한 Cobject에서 클래스를 파생.
호출을 IsKindOf 멤버 함수는 클래스의 개체에 대 한 사용 하는 RUNTIME_CLASS 생성 하는 매크로 CRuntimeClass 인수를 다음과 같이:
class CPerson : public CObject { DECLARE_DYNAMIC( CPerson ) // other declarations };
IMPLEMENT_DYNAMIC( CPerson, CObject ) IMPLEMENT_DYNCREATE(CMyDynCreateObj, CObject) void MemoryCorruptingSnippet(bool bCorrupt) { if (bCorrupt) { CAge* pcage = new CAge(21); // CAge is derived from CObject. Age* page = new Age(22); // Age is NOT derived from CObject. *(((char*)pcage) - 1) = 99; // Corrupt preceding guard byte *(((char*)page) - 1) = 99; // Corrupt preceding guard byte AfxCheckMemory(); } } void SomeFunction(void) { CObject* pMyObject = new CPerson; if(NULL != pMyObject && pMyObject->IsKindOf( RUNTIME_CLASS( CPerson ) ) ) { //if IsKindOf is true, then cast is all right CPerson* pmyPerson = (CPerson*) pMyObject ; pmyPerson->AssertValid(); // other code goes here... } delete pMyObject; }
[!참고]
IsKindOf 반환 TRUE 개체가 지정 된 클래스에서 파생 된 클래스 또는 지정 된 클래스의 멤버인 경우입니다.IsKindOf필요한 경우 파생 된 Mfc 클래스에 대 한 다중 상속이 사용할 수 있지만 여러 상속 하거나 가상 기본 클래스에서는 지원 하지 않습니다.
런타임 클래스 정보는 개체의 동적 생성을 것입니다.이 프로세스는이 문서에서 설명 된 동적 개체 만들기.
대 한 자세한 정보에 serialization 및 런타임 클래스 정보는 문서를 참조 하십시오. MFC의 파일 및 Serialization.