다음을 통해 공유


런타임 클래스 정보 액세스

이 문서에서는 런타임에 개체 클래스 정보에 액세스 하는 방법을 설명 합니다.

[!참고]

MFC를 사용 하지 않습니다를 런타임 형식 정보 (RTTI) 지원이 Visual C++ 4.0에서 도입 되었습니다.

클래스에서 파생 된 경우 CObject 사용의 DECLARE_동적IMPLEMENT_DYNAMIC, DECLARE_DYNCREATEIMPLEMENT_DYNCREATE, 또는 DECLARE_SERIALIMPLEMENT_SERIAL 매크로 문서에서 설명한 Cobject에서 클래스를 파생, CObject 클래스는 런타임에 개체의 정확한 클래스를 결정할 수 있습니다.

이 기능이 필요한 검사 함수 인수의 추가 형식 및 개체의 클래스를 기반으로 하는 특수 한 목적의 코드를 작성 해야 하는 경우에 가장 유용 합니다.그러나 기능과 가상 함수 때문에이 방법은 일반적으로 권장 되지 않습니다.

CObject 멤버 함수 IsKindOf 사용 하 여 특정 개체를 지정 된 클래스에 속해 있거나 특정 클래스에서 파생 된 경우 확인할 수 있습니다.인수를 IsKindOf 되는 CRuntimeClass 개체를 사용 하 여 얻을 수 있습니다의 RUNTIME_CLASS 클래스의 이름 가진 매크로.

RUNTIME_CLASS 매크로 사용 하려면

  • 사용 RUNTIME_CLASS 클래스에 대 한 그림과 같이 클래스의 이름을 가진 CObject:

    CRuntimeClass* pClass = RUNTIME_CLASS( CObject );   
    

거의 런타임 클래스 개체에 직접 액세스 해야 합니다.런타임 클래스 개체에 전달 하는 것이 보다 일반적인 사용의 IsKindOf 다음 절차에 나와 있는 것 처럼 작동 합니다.IsKindOf 함수 테스트 개체는 특정 클래스에 속하는지 확인 합니다.

IsKindOf 함수를 사용.

  1. 클래스가 런타임 클래스를 지원 하는지 확인 하십시오.즉, 클래스에서 직접 또는 간접적으로에서 파생 된 해야 CObject 및 사용의 DECLARE_동적IMPLEMENT_DYNAMIC, DECLARE_DYNCREATEIMPLEMENT_DYNCREATE, 또는 DECLARE_SERIALIMPLEMENT_SERIAL 매크로 문서에서 설명한 Cobject에서 클래스를 파생.

  2. 호출을 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.

참고 항목

개념

CObject 사용