Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megjegyzés:
A Microsoft Foundation Classes (MFC) könyvtár továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.
Minden származtatott CObject osztály egy CRuntimeClass olyan struktúrához van társítva, amellyel futtatáskor információkat szerezhet be egy objektumról vagy annak alaposztályáról.
Szemantika
struct CRuntimeClass
Tagok
Nyilvános metódusok
| Név | Description |
|---|---|
| CRuntimeClass::CreateObject | Objektumot hoz létre futás közben. |
| CRuntimeClass::FromName | Létrehoz egy objektumot futás közben az ismerős osztálynév használatával. |
| CRuntimeClass::IsDerivedFrom | Meghatározza, hogy az osztály a megadott osztályból származik-e. |
Nyilvános adatok tagjai
| Név | Description |
|---|---|
| CRuntimeClass::m_lpszClassName | Az osztály neve. |
| CRuntimeClass::m_nObjectSize | Az objektum mérete bájtban. |
| CRuntimeClass::m_pBaseClass | Az alaposztály szerkezetére mutató mutató CRuntimeClass . |
| CRuntimeClass::m_pfnCreateObject | Az objektumot dinamikusan létrehozó függvényre mutató mutató. |
| CRuntimeClass::m_pfnGetBaseClass | Visszaadja a struktúrát CRuntimeClass (csak dinamikusan összekapcsolt állapotban érhető el). |
| CRuntimeClass::m_wSchema | Az osztály sémaszáma. |
Megjegyzések
CRuntimeClass egy struktúra, ezért nem rendelkezik alaposztálysal.
Az objektum osztályának futásidőben történő meghatározására akkor van szükség, ha a függvényargumentumok további típusellenőrzésére van szükség, vagy ha speciális célú kódot kell írnia egy objektum osztálya alapján. A futásidejű osztály adatait közvetlenül a C++ nyelv nem támogatja.
CRuntimeClass információkat nyújt a kapcsolódó C++ objektumról, például az CRuntimeClass alaposztály mutatóját és a kapcsolódó osztály ASCII-osztálynevét. Ez a struktúra különböző függvényeket is implementál, amelyekkel dinamikusan hozhat létre objektumokat, egy ismerős névvel megadhatja az objektum típusát, és meghatározza, hogy a kapcsolódó osztály egy adott osztályból származik-e.
További információ a használatról CRuntimeClass: Accessing Run-Time Class Information.
Öröklési hierarchia
CRuntimeClass
Requirements
Fejléc: afx.h
CRuntimeClass::CreateObject
Hívja meg ezt a függvényt, hogy dinamikusan hozza létre a megadott osztályt a futási idő alatt.
CObject* CreateObject();
static CObject* PASCAL CreateObject(LPCSTR lpszClassName);
static CObject* PASCAL CreateObject(LPCWSTR lpszClassName);
Paraméterek
lpszClassName
A létrehozandó osztály ismerős neve.
Visszaadott érték
Mutató az újonnan létrehozott objektumra vagy NULL értékre, ha az osztály neve nem található, vagy nincs elegendő memória az objektum létrehozásához.
Megjegyzések
A származtatott CObject osztályok támogathatják a dinamikus létrehozást, ami egy adott osztály objektumának futásidőben történő létrehozását teszi lehetővé. A dokumentum-, nézet- és keretosztályoknak például támogatniuk kell a dinamikus létrehozást. További információ a dinamikus létrehozásról és a CreateObject tagról: CObject class and CObject Class: Specifying Levels of Functionality.
Example
Lásd az IsDerivedFrom példát.
CRuntimeClass::FromName
Hívja meg ezt a függvényt az CRuntimeClass ismerős névhez társított struktúra lekéréséhez.
static CRuntimeClass* PASCAL FromName(LPCSTR lpszClassName);
static CRuntimeClass* PASCAL FromName(LPCWSTR lpszClassName);
Paraméterek
lpszClassName
Egy osztály ismerős neve, amelyből CObjectszármazik.
Visszaadott érték
Egy objektumra mutató CRuntimeClass mutató, amely megfelel az lpszClassName fájlban átadott névnek. A függvény null értéket ad vissza, ha nem található egyező osztálynév.
Example
// This example creates an object if CAge is defined.
CRuntimeClass* pClass = CRuntimeClass::FromName(_T("CAge"));
if (pClass == NULL)
{
// not found, display a warning for diagnostic purposes
AfxMessageBox(_T("Warning: CMyClass not defined"));
return NULL;
}
// attempt to create the object with the found CRuntimeClass
CObject* pObject = pClass->CreateObject();
CRuntimeClass::IsDerivedFrom
Hívja meg ezt a függvényt annak megállapításához, hogy a hívóosztály a pBaseClass paraméterben megadott osztályból származik-e.
BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;
Paraméterek
pBaseClass
Egy osztály ismerős neve, amelyből CObjectszármazik.
Visszaadott érték
IGAZ, ha az osztályhívás IsDerivedFrom abból az alaposztályból származik, amelynek CRuntimeClass struktúrája paraméterként van megadva, ellenkező esetben HAMIS.
Megjegyzések
A kapcsolatot az határozza meg, hogy a tag osztályától kezdve a származtatott osztályok láncolatán végig a legfelsőig "sétál". Ez a függvény csak akkor ad vissza HAMIS értéket, ha nem található egyezés az alaposztályhoz.
Megjegyzés:
A CRuntimeClass struktúra használatához bele kell foglalnia a IMPLEMENT_DYNAMIC, IMPLEMENT_DYNCREATE vagy IMPLEMENT_SERIAL makrót annak az osztálynak az implementációjában, amelynek futásidejű objektumadatait le szeretné kérni.
További információ a használatról CRuntimeClass: CObject Class: Accessing Run-Time Class Information.
Example
// This example creates an object from the run-time class. It only
// creates objects derived from CWnd.
// We only want to create an object derived from CWnd.
if (!pClass->IsDerivedFrom(RUNTIME_CLASS(CWnd)))
{
TRACE(_T("Error; Object %s is not derived from CWnd\n"),
pClass->m_lpszClassName);
return FALSE;
}
// Get a pointer to the base class CRuntimeClass.
#ifdef _AFXDLL
CRuntimeClass* pBaseClass = pClass->m_pfnGetBaseClass();
#else
CRuntimeClass* pBaseClass = pClass->m_pBaseClass;
#endif
ASSERT(pBaseClass != NULL);
TRACE("Creating object %s derived from %s, with object size %d "
"and schema %d\n", pClass->m_lpszClassName,
pBaseClass->m_lpszClassName, pClass->m_nObjectSize,
pClass->m_wSchema);
// Create the object.
CObject* pObject = pClass->CreateObject();
CRuntimeClass::m_lpszClassName
Az ASCII-osztálynevet tartalmazó null értékű sztring.
Megjegyzések
Ezzel a névvel létrehozhatja az osztály egy példányát a FromName tagfüggvény használatával.
Example
Lásd az IsDerivedFrom példát.
CRuntimeClass::m_nObjectSize
Az objektum mérete bájtban.
Megjegyzések
Ha az objektumnak vannak olyan adattagok, amelyek a lefoglalt memóriára mutatnak, a rendszer nem tartalmazza a memória méretét.
Example
Lásd az IsDerivedFrom példát.
CRuntimeClass::m_pBaseClass
Ha az alkalmazás statikusan kapcsolódik az MFC-hez, ez az adattag az alaposztály szerkezetére mutató mutatót CRuntimeClass tartalmaz.
Megjegyzések
Ha az alkalmazás dinamikusan kapcsolódik az MFC-kódtárhoz, tekintse meg a m_pfnGetBaseClass.
Example
Lásd az IsDerivedFrom példát.
CRuntimeClass::m_pfnCreateObject
Az osztály objektumát létrehozó alapértelmezett konstruktorra mutató függvény.
Megjegyzések
Ez a mutató csak akkor érvényes, ha az osztály támogatja a dinamikus létrehozást; ellenkező esetben a függvény NULL értéket ad vissza.
CRuntimeClass::m_pfnGetBaseClass
Ha az alkalmazás megosztott DLL-ként használja az MFC-kódtárat, ez az adattag egy olyan függvényre mutat, amely az CRuntimeClass alaposztály szerkezetét adja vissza.
Megjegyzések
Ha az alkalmazás statikusan kapcsolódik az MFC-kódtárhoz, tekintse meg m_pBaseClass.
Example
Lásd az IsDerivedFrom példát.
CRuntimeClass::m_wSchema
A sémaszám (-1 nemializálható osztályok esetén).
Megjegyzések
A sémaszámokról további információt a IMPLEMENT_SERIAL makróban talál.
Example
Lásd az IsDerivedFrom példát.
Lásd még
hierarchiadiagram
CObject::GetRuntimeClass
CObject::IsKindOf
RUNTIME_CLASS
IMPLEMENT_DYNAMIC
IMPLEMENT_DYNCREATE
IMPLEMENT_SERIAL