Sdílet prostřednictvím


Přístup k informacím spuštění třídy

Tento článek vysvětluje, jak přístup k informacím o třídu objektu za běhu.

[!POZNÁMKA]

MFC nepoužívá Informace O typu Run-Time (RTTI) podpory zavedené v aplikaci Visual C++ 4.0.

Pokud jste odvozené od třídy CObject a DECLARE_dynamické a IMPLEMENT_DYNAMIC, DECLARE_DYNCREATE a IMPLEMENT_DYNCREATE, nebo DECLARE_SERIAL a IMPLEMENT_SERIAL makra jsou vysvětleny v článku odvození třídy z CObject, CObject třída má schopnost určit přesné třídu objektu za běhu.

Tato možnost je užitečná, je zapotřebí zvláštní typ argumentů funkce kontroly a musíte napsat kód speciální třídy objektu na základě.Však tento postup se nedoporučuje obvykle protože duplikuje funkci virtuální funkce.

CObject Členské funkce IsKindOf lze určit konkrétní objekt patří do určené třídy nebo je odvozen z konkrétní třídy.Argument IsKindOf je CRuntimeClass objekt, který můžete získat pomocí RUNTIME_CLASS makro s názvem třídy.

Použití maker RUNTIME_CLASS

  • Použití RUNTIME_CLASS s názvem třídy, jak je znázorněno zde pro třídu CObject:

    CRuntimeClass* pClass = RUNTIME_CLASS( CObject );   
    

Musíte jen zřídka přímý přístup k objektu třídy run-time.Další běžné použití je předat objekt třídy běhu IsKindOf funkci, jak je znázorněno v následujícím postupu.IsKindOf Zkoušky funkce zobrazíte, pokud patří do určité třídy.

Použití funkce IsKindOf

  1. Zkontrolujte, zda že třída má podporu spuštění třídy.Je třída musí pocházet přímo nebo nepřímo z CObject a DECLARE_dynamické a IMPLEMENT_DYNAMIC, DECLARE_DYNCREATE a IMPLEMENT_DYNCREATE, nebo DECLARE_SERIAL a IMPLEMENT_SERIAL makra jsou vysvětleny v článku odvození třídy z CObject.

  2. Volání IsKindOf členské funkce pro objekty této třídy pomocí RUNTIME_CLASS makro generovat CRuntimeClass argument, jak je znázorněno zde:

    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;
    }
    

    [!POZNÁMKA]

    Vrátí IsKindOf TRUE Pokud je členem zadané třídy nebo třídy odvozené od třídy zadaný objekt.IsKindOfAčkoli můžete použít více dědičnosti v odvozených tříd Microsoft Foundation potřeby, nepodporuje více dědičnost nebo virtuální základní třídy.

Jedné třídy spuštění informací slouží k vytvoření dynamických objektů.Tento proces je popsán v článku Dynamické vytvoření objektu.

Podrobnější informace o serializaci a spuštění třídy informace naleznete v článcích soubory v MFC a serializace.

Viz také

Koncepty

Pomocí CObject