런타임 클래스 정보 액세스
이 문서에서는 런타임에 개체 클래스에 대한 정보에 액세스하는 방법을 설명합니다.
참고 항목
MFC는 Visual C++ 4.0에 도입된 RTTI(런타임 형식 정보) 지원을 사용하지 않습니다.
CObject에서 클래스를 파생하고 DECLARE_DYNAMIC 및 IMPLEMENT_DYNAMIC
CObjectCObject
에서 클래스 파생 문서에 설명된 , DECLARE_DYNCREATE
및 IMPLEMENT_DYNCREATE
및 DECLARE_SERIAL
매크로를 IMPLEMENT_SERIAL
사용한 경우 클래스는 런타임에 개체의 정확한 클래스를 확인할 수 있습니다.
이 기능은 함수 인수의 추가 형식 검사 필요한 경우와 개체의 클래스에 따라 특수 용도의 코드를 작성해야 하는 경우에 가장 유용합니다. 그러나 이 방법은 일반적으로 가상 함수의 기능을 복제하므로 권장되지 않습니다.
CObject
멤버 함수 IsKindOf
를 사용하여 특정 개체가 지정된 클래스에 속하는지 또는 특정 클래스에서 파생되었는지 확인할 수 있습니다. 인수 IsKindOf
는 CRuntimeClass
클래스의 이름과 함께 매크로를 RUNTIME_CLASS
사용할 수 있는 개체입니다.
RUNTIME_CLASS 매크로를 사용하려면
클래스의 경우 다음과 같이 클래스
CObject
의 이름과 함께 사용합니다RUNTIME_CLASS
.CRuntimeClass *pClass = RUNTIME_CLASS(CObject);
런타임 클래스 개체에 직접 액세스할 필요가 거의 없습니다. 더 일반적인 용도는 다음 절차와 같이 런타임 클래스 개체를 IsKindOf
함수에 전달하는 것입니다. 함수는 IsKindOf
개체를 테스트하여 특정 클래스에 속하는지 확인합니다.
IsKindOf 함수를 사용하려면
클래스에 런타임 클래스 지원이 있는지 확인합니다. 즉, 클래스는 직접 또는 간접적으로 파생되어 DECLARE_DYNAMIC 및 CObject에서
CObject
클래스 파생 문서에 설명된 매크로DECLARE_DYNCREATE
및 ,DECLARE_SERIAL
및IMPLEMENT_DYNCREATE
IMPLEMENT_SERIAL
및 매크로를 사용해야 합니다.IMPLEMENT_DYNAMIC
다음과 같이 매크로를
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
에서는 여러 상속 또는 가상 기본 클래스를 지원하지 않지만 필요한 경우 파생 Microsoft Foundation 클래스에 여러 상속을 사용할 수 있습니다.
런타임 클래스 정보의 한 가지 사용은 개체의 동적 생성에 있습니다. 이 프로세스는 동적 개체 만들기 문서에서 설명합니다.
serialization 및 런타임 클래스 정보에 대한 자세한 내용은 MFC의 파일 및 Serialization 문서를 참조하세요.