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.
A Microsoft Foundation osztálytár fő alaposztálya.
Szemantika
class AFX_NOVTABLE CObject
Tagok
Védett konstruktorok
| Név | Description |
|---|---|
CObject::CObject |
Alapértelmezett konstruktor. |
Nyilvános metódusok
| Név | Description |
|---|---|
CObject::AssertValid |
Ellenőrzi az objektum integritását. |
CObject::Dump |
Diagnosztikai memóriaképet hoz létre az objektumról. |
CObject::GetRuntimeClass |
CRuntimeClass Az objektum osztályának megfelelő struktúrát adja vissza. |
CObject::IsKindOf |
Teszteli az objektum egy adott osztályhoz való viszonyát. |
CObject::IsSerializable |
Teszteli, hogy ez az objektum szerializálható-e. |
CObject::Serialize |
Betölt vagy tárol egy objektumot egy archívumból vagy egy archívumba. |
Nyilvános operátorok
| Név | Description |
|---|---|
CObject::operator delete |
Speciális delete operátor. |
CObject::operator new |
Speciális new operátor. |
Megjegyzések
Nem csak az olyan könyvtárosztályok, mint például CFile az és CObList, hanem az ön által írt osztályok esetében is gyökérként szolgál.
CObject alapvető szolgáltatásokat nyújt, többek között
- Szerializálás támogatása
- Futásidejű osztály adatai
- Objektumdiagnosztikai kimenet
- Kompatibilitás gyűjteményosztályokkal
CObject nem támogatja a többszörös öröklést. A származtatott osztályoknak csak egy CObject alaposztályuk lehet, és a CObject hierarchiában a bal szélsőnek kell lenniük. Megengedhető azonban, hogy a jobb oldali többöröklésű ágakban struktúrák és nem CObjectszármaztatott osztályok tartoznak.
Ha az osztály implementációjában és deklarációiban az opcionális makrók némelyikét használja, a származtatás jelentős előnyökkel jár CObject .
Az első szintű makrók és DECLARE_DYNAMICIMPLEMENT_DYNAMICa futtatási idő hozzáférést biztosítanak az osztály nevéhez és a hierarchiában elfoglalt helyéhez. Ez pedig lehetővé teszi a jelentéssel bíró diagnosztikai memóriaképek készítését.
A második szintű makrók, DECLARE_SERIAL valamint IMPLEMENT_SERIALaz első szintű makrók összes funkcióját tartalmazzák, és lehetővé teszik, hogy egy objektum "szerializálva" legyen egy "archívumba".
A Microsoft Foundation-osztályok és a C++ osztályok általános és használatával CObjectkapcsolatos információkért lásd: A CObject és a szerializálás használata.
Öröklési hierarchia
CObject
Requirements
Fejléc:afx.h
CObject::AssertValid
Ellenőrzi az objektum integritását.
virtual void AssertValid() const;
Megjegyzések
AssertValid belső állapotának ellenőrzésével elvégzi az objektum érvényességének ellenőrzését. A kódtár AssertValid hibakeresési verziójában érvényesítheti, majd egy üzenettel leállítja a programot, amely felsorolja a sorszámot és a fájlnevet, ahol az állítás sikertelen volt.
Amikor saját osztályt ír, felül kell bírálnia a függvényt AssertValid , hogy diagnosztikai szolgáltatásokat nyújtson saját magának és az osztály többi felhasználójának. A felülrendelt AssertValid általában meghívja az AssertValid alaposztály függvényét, mielőtt a származtatott osztályra egyedi adattagokat ellenőriz.
Mivel AssertValid ez egy const függvény, a teszt során nem módosíthatja az objektum állapotát. A saját származtatott osztályfüggvényei AssertValid nem kivételeket vethetnek ki, hanem azt kell ellenőrizniük, hogy érvénytelen objektumadatokat észlelnek-e.
Az "érvényesség" definíciója az objektum osztályától függ. Általában a függvénynek "sekély ellenőrzést" kell végeznie. Vagyis ha egy objektum más objektumokra mutató mutatókat tartalmaz, ellenőriznie kell, hogy a mutatók nem NULLtalálhatók-e, de nem szabad érvényességvizsgálatot végeznie a mutatók által hivatkozott objektumokon.
Example
Tekintse meg CObList::CObList az CAge összes CObject példában használt osztály listáját.
void CAge::AssertValid() const
{
CObject::AssertValid();
ASSERT(m_years > 0);
ASSERT(m_years < 105);
}
Egy másik példa: AfxDoForAllObjects.
CObject::CObject
Ezek a függvények a standard CObject konstruktorok.
CObject();
CObject(const CObject& objectSrc);
Paraméterek
objectSrc
Hivatkozás egy másikra CObject
Megjegyzések
Az alapértelmezett verziót a származtatott osztály konstruktora automatikusan meghívja.
Ha az osztály szerializálható (a makrót is tartalmazza IMPLEMENT_SERIAL ), akkor az osztálydeklarációban alapértelmezett konstruktornak (argumentumok nélküli konstruktornak) kell lennie. Ha nincs szüksége alapértelmezett konstruktorra, deklaráljon egy privát vagy védett "üres" konstruktort. További információt a Használat CObjectcímű témakörben talál.
A standard C++ alapértelmezett osztálypéldány-konstruktor tagonként készít másolatot. A magánpéldány-konstruktor CObject jelenléte garantálja a fordító hibaüzenetét, ha az osztály másoláskonstruktorára szükség van, de nem érhető el. Adjon meg egy példánykonstruktort, ha az osztály megköveteli ezt a képességet.
Example
Tekintse meg CObList::CObList a CAge példákban CObject használt osztály listáját.
// Create a CAge object using the default constructor.
CAge age1;
// Create a CAge object using the copy constructor.
CAge age2(age1);
CObject::Dump
Az objektum tartalmát egy CDumpContext objektumba dobja.
virtual void Dump(CDumpContext& dc) const;
Paraméterek
dc
A memóriakép diagnosztikai környezete általában afxDump.
Megjegyzések
Amikor saját osztályt ír, felül kell bírálnia a függvényt Dump , hogy diagnosztikai szolgáltatásokat nyújtson saját magának és az osztály többi felhasználójának. A felülírt Dump függvény általában meghívja az alaposztály függvényét, Dump mielőtt a származtatott osztályra egyedi adattagokat nyomtat.
CObject::DumpKinyomtatja az osztály nevét, ha az osztály a makrót vagy IMPLEMENT_SERIAL a makrót IMPLEMENT_DYNAMIC használja.
Megjegyzés:
A Dump függvény nem nyomtathat újsoros karaktert a kimenet végén.
Dump a hívásoknak csak a Microsoft Foundation osztálykönyvtár hibakeresési verziójában van értelme. Zárójelbe kell tenni a hívásokat, a függvénydeklarációkat és a függvény-implementációkat a #endif feltételes fordításra vonatkozó utasításokkal#ifdef _DEBUG.
Mivel Dump ez egy const függvény, nem módosíthatja az objektum állapotát a memóriakép során.
A CDumpContext beszúrási (<<) operátor meghívja Dump a CObject kurzor beszúrását.
Dump csak az objektumok "aciklikus" memóriaképét teszi lehetővé. Létrehozhat például egy objektumlistát, de ha az egyik objektum maga a lista, akkor végül túlcsordul a verem.
Example
Tekintse meg CObList::CObList az CAge összes CObject példában használt osztály listáját.
void CAge::Dump(CDumpContext& dc) const
{
CObject::Dump(dc);
dc << _T("Age = ") << m_years;
}
CObject::GetRuntimeClass
CRuntimeClass Az objektum osztályának megfelelő struktúrát adja vissza.
virtual CRuntimeClass* GetRuntimeClass() const;
Visszaadott érték
Az objektum osztályának megfelelő struktúra mutatójaCRuntimeClass; soha.NULL
Megjegyzések
Minden -CObjectszármaztatott osztályhoz egy CRuntimeClass struktúra tartozik. A struktúra tagjai a következők:
LPCSTR m_lpszClassNameAz ASCII-osztálynevet tartalmazó null értékű sztring.int m_nObjectSizeAz objektum mérete bájtban. Ha az objektumnak vannak olyan adattagok, amelyek a lefoglalt memóriára mutatnak, a memória mérete nem lesz benne.UINT m_wSchemaA sémaszám (-1 nemializálható osztályok esetén). A sémaszám leírását aIMPLEMENT_SERIALmakróban talál.CObject* (PASCAL* m_pfnCreateObject)()Az osztály objektumát létrehozó alapértelmezett konstruktorra mutató függvény (csak akkor érvényes, ha az osztály támogatja a dinamikus létrehozást, ellenkező esetben visszaadjaNULL).CRuntimeClass* (PASCAL* m_pfn_GetBaseClass )()Ha az alkalmazás dinamikusan kapcsolódik az MFC AFXDLL-verziójához, egy olyan függvényre mutató mutatót, amely azCRuntimeClassalaposztály szerkezetét adja vissza.CRuntimeClass* m_pBaseClassHa az alkalmazás statikusan kapcsolódik az MFC-hez, az alaposztály szerkezetére mutató mutatóCRuntimeClass.
Ehhez a függvényhez az osztály implementációjában használni kell az IMPLEMENT_DYNAMIC, IMPLEMENT_DYNCREATEvagy IMPLEMENT_SERIAL makrót. Ellenkező esetben helytelen eredményeket fog kapni.
Example
Tekintse meg CObList::CObList az CAge összes CObject példában használt osztály listáját.
CAge a(21);
CRuntimeClass* prt = a.GetRuntimeClass();
ASSERT(strcmp(prt->m_lpszClassName, "CAge") == 0);
CObject::IsKindOf
Teszteli az objektum egy adott osztályhoz való viszonyát.
BOOL IsKindOf(const CRuntimeClass* pClass) const;
Paraméterek
pClass
A -származtatott osztályhoz CObjecttársított struktúra mutatójaCRuntimeClass.
Visszaadott érték
Nonzero, ha az objektum megfelel az osztálynak; egyéb esetben 0.
Megjegyzések
Ez a függvény ellenőrzi pClass , hogy (1) a megadott osztály objektuma-e, vagy (2) a megadott osztályból származtatott osztály objektuma-e. Ez a függvény csak a DECLARE_DYNAMIC, DECLARE_DYNCREATEvagy DECLARE_SERIAL makróval deklarált osztályok esetében működik.
Ne használja ezt a függvényt széles körben, mert legyőzi a C++ polimorfizmus funkciót. Használjon inkább virtuális függvényeket.
Example
Tekintse meg CObList::CObList az CAge összes CObject példában használt osztály listáját.
CAge a(21); // Must use IMPLEMENT_DYNAMIC, IMPLEMENT _DYNCREATE, or
// IMPLEMENT_SERIAL
ASSERT(a.IsKindOf(RUNTIME_CLASS(CAge)));
ASSERT(a.IsKindOf(RUNTIME_CLASS(CObject)));
CObject::IsSerializable
Ellenőrzi, hogy ez az objektum jogosult-e szerializálásra.
BOOL IsSerializable() const;
Visszaadott érték
Nonzero, ha ez az objektum szerializálható; egyéb esetben 0.
Megjegyzések
Ahhoz, hogy egy osztály szerializálható legyen, deklarációjának tartalmaznia kell a DECLARE_SERIAL makrót, a megvalósításnak pedig tartalmaznia kell a makrót IMPLEMENT_SERIAL .
Megjegyzés:
Ne bírálja felül ezt a függvényt.
Example
Tekintse meg CObList::CObList az CAge összes CObject példában használt osztály listáját.
CAge a(21);
ASSERT(a.IsSerializable());
CObject::operator delete
A kódtár kiadási verziójához az operátor delete felszabadítja az operátor newáltal lefoglalt memóriát.
void PASCAL operator delete(void* p);
void PASCAL operator delete(
void* p,
void* pPlace);
void PASCAL operator delete(
void* p,
LPCSTR lpszFileName,
int nLine);
Megjegyzések
A hibakeresési verzióban az operátor delete részt vesz a memóriaszivárgások észlelésére tervezett foglalás-figyelési sémában.
Ha a kódsort használja
#define new DEBUG_NEW
az implementációk bármelyike előtt. A CPP-fájl, majd a harmadik verzió delete lesz használva, amely a fájlnevet és a sorszámot tárolja a lefoglalt blokkban a későbbi jelentéskészítéshez. Nem kell aggódnia a további paraméterek megadása miatt; a makró gondoskodik róla.
Még ha nem is hibakeresési módban használja DEBUG_NEW , továbbra is szivárgásészlelést kap, de a fent leírt forrás-fájl sorszám jelentés nélkül.
Ha felülbírálja az operátorokat new , és deleteelveszíti ezt a diagnosztikai képességet.
Example
Tekintse meg CObList::CObList a CAge példákban CObject használt osztály listáját.
void CAge::operator delete(void* p)
{
free(p);
}
void CAge::operator delete(void *p, LPCSTR lpszFileName, int nLine)
{
UNREFERENCED_PARAMETER(lpszFileName);
UNREFERENCED_PARAMETER(nLine);
free(p);
}
CObject::operator new
A kódtár kiadási verziójához az operátor new az optimális memóriafoglalást a következőhöz mallochasonló módon végzi el.
void* PASCAL operator new(size_t nSize);
void* PASCAL operator new(size_t, void* p);
void* PASCAL operator new(
size_t nSize,
LPCSTR lpszFileName,
int nLine);
Megjegyzések
A hibakeresési verzióban az operátor new részt vesz a memóriaszivárgások észlelésére tervezett foglalás-figyelési sémában.
Ha a kódsort használja
#define new DEBUG_NEW
az implementációk bármelyike előtt. A CPP-fájl, majd a második verzió new lesz használva, amely a fájlnevet és a sorszámot tárolja a lefoglalt blokkban a későbbi jelentéskészítéshez. Nem kell aggódnia a további paraméterek megadása miatt; a makró gondoskodik róla.
Még ha nem is hibakeresési módban használja DEBUG_NEW , továbbra is szivárgásészlelést kap, de a fent leírt forrás-fájl sorszám jelentés nélkül.
Megjegyzés:
Ha felülbírálja ezt az operátort, felül kell bírálnia deleteazt is. Ne használja a standard kódtárfüggvényt _new_handler .
Example
Tekintse meg CObList::CObList a CAge példákban CObject használt osztály listáját.
void* CAge::operator new(size_t nSize)
{
return malloc(nSize);
}
void* CAge::operator new(size_t nSize, LPCSTR lpszFileName, int nLine)
{
UNREFERENCED_PARAMETER(lpszFileName);
UNREFERENCED_PARAMETER(nLine);
return malloc(nSize);
}
CObject::Serialize
Beolvassa vagy beírja ezt az objektumot egy archívumból vagy egy archívumba.
virtual void Serialize(CArchive& ar);
Paraméterek
ar
Egy CArchive objektum, amelyből szerializálható.
Megjegyzések
Felülbírálás Serialize minden szerializálni kívánt osztálynál. A felülírtnak Serialize először meg kell hívnia az Serialize alaposztály függvényét.
A makrót az DECLARE_SERIAL osztálydeklarációban is használnia kell, és a makrót a IMPLEMENT_SERIAL megvalósításban kell használnia.
Az CArchive::IsLoading archívum betöltése vagy tárolása, illetve CArchive::IsStoring annak meghatározása, hogy az archívum betöltődik-e vagy tárolva van-e.
Serializemeghívja és CArchive::WriteObjectmeghívjaCArchive::ReadObject. Ezek a függvények a beszúrási operátorhoz ( <<) és az CArchive extrakciós operátorhoz () >>vannak társítva.
Szerializálási példákért tekintse meg az objektum szerializálása című cikket.
Example
Tekintse meg CObList::CObList az CAge összes CObject példában használt osztály listáját.
void CAge::Serialize(CArchive& ar)
{
CObject::Serialize(ar);
if(ar.IsStoring())
ar << m_years;
else
ar >> m_years;
}