Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Microsoft Foundation Sınıf Kitaplığı için temel sınıf.
Sözdizimi
class AFX_NOVTABLE CObject
Üyeler
Korumalı Oluşturucular
| Veri Akışı Adı | Açıklama |
|---|---|
CObject::CObject |
Varsayılan oluşturucu. |
Genel Yöntemler
| Veri Akışı Adı | Açıklama |
|---|---|
CObject::AssertValid |
Bu nesnenin bütünlüğünü doğrular. |
CObject::Dump |
Bu nesnenin tanılama dökümünü oluşturur. |
CObject::GetRuntimeClass |
Bu nesnenin CRuntimeClass sınıfına karşılık gelen yapıyı döndürür. |
CObject::IsKindOf |
Bu nesnenin belirli bir sınıfla ilişkisini sınar. |
CObject::IsSerializable |
Bu nesnenin seri hale getirilip getirilemeyeceğini görmek için sınar. |
CObject::Serialize |
Bir nesneyi arşivden/arşive yükler veya depolar. |
Ortak İşleçler
| Veri Akışı Adı | Açıklama |
|---|---|
CObject::operator delete |
Özel delete işleç. |
CObject::operator new |
Özel new işleç. |
Açıklamalar
Yalnızca ve CObListgibi CFile kitaplık sınıfları için değil, aynı zamanda yazdığınız sınıflar için de kök görevi görür. CObject aşağıdakiler dahil olmak üzere temel hizmetleri sağlar:
- Serileştirme desteği
- Çalışma zamanı sınıf bilgileri
- Nesne tanılama çıktısı
- Koleksiyon sınıfları ile uyumluluk
CObject birden çok devralmayı desteklemez. Türetilmiş sınıflarınızın yalnızca bir CObject temel sınıfı olabilir ve bu CObject sınıf hiyerarşide en sol tarafta olmalıdır. Ancak sağ taraftaki çoklu devralma dallarında yapıların ve CObjecttüretilmemiş sınıfların olması izin verilebilir.
Sınıf uygulamanızda ve bildirimlerinizde isteğe bağlı makrolardan bazılarını kullanırsanız türetmenin önemli avantajlarını CObject elde edersiniz.
birinci düzey makrolar DECLARE_DYNAMIC ve IMPLEMENT_DYNAMIC, sınıf adına ve hiyerarşideki konumuna çalışma zamanı erişimine izin verir. Bu da anlamlı tanılama dökümü sağlar.
İkinci düzey makrolar DECLARE_SERIAL ve IMPLEMENT_SERIAL, birinci düzey makroların tüm işlevlerini içerir ve bir nesnenin "arşive" ve arşivden "serileştirilmesini" sağlar.
Genel olarak Microsoft Foundation sınıflarını ve C++ sınıflarını türetme ve kullanma CObjecthakkında bilgi için bkz . CObject ve Seri hale getirme kullanma.
Devralma Hiyerarşisi
CObject
Gereksinimler
Üstbilgi: afx.h
CObject::AssertValid
Bu nesnenin bütünlüğünü doğrular.
virtual void AssertValid() const;
Açıklamalar
AssertValid bu nesnenin iç durumunu denetleyerek bir geçerlilik denetimi gerçekleştirir. Kitaplığın Hata ayıklama sürümünde, AssertValid onaylama işleminin başarısız olduğu satır numarasını ve dosya adını listeleyen bir iletiyle programı onaylayıp sonlandırabilir.
Kendi sınıfınızı yazarken, kendiniz ve sınıfınızın diğer kullanıcıları için tanılama hizmetleri sağlamak üzere işlevini geçersiz kılmalısınız AssertValid . geçersiz kılınan AssertValid genellikle türetilmiş sınıfa özgü veri üyelerini denetlemeden önce temel sınıfının işlevini çağırır AssertValid .
AssertValid Bir const işlev olduğundan, test sırasında nesne durumunu değiştirmenize izin verilmez. Kendi türetilmiş sınıf AssertValid işlevleriniz özel durumlar oluşturmamalı, bunun yerine geçersiz nesne verilerini algılayıp algılamadıklarını onaylamalıdır.
"Geçerlilik" tanımı nesnenin sınıfına bağlıdır. Kural olarak, işlevin "sığ denetim" yapması gerekir. Başka bir deyişle, bir nesne diğer nesnelere yönelik işaretçiler içeriyorsa, işaretçilerin olup olmadığını NULLdenetlemeli, ancak işaretçiler tarafından başvuruda bulunılan nesneler üzerinde geçerlilik testi yapmamalıdır.
Örnek
Tüm CObject örneklerde kullanılan sınıfın CAge listesi için bkzCObList::CObList.
void CAge::AssertValid() const
{
CObject::AssertValid();
ASSERT(m_years > 0);
ASSERT(m_years < 105);
}
Başka bir örnek için bkz AfxDoForAllObjects. .
CObject::CObject
Bu işlevler standart CObject oluşturuculardır.
CObject();
CObject(const CObject& objectSrc);
Parametreler
objectSrc
Başka bir başvuru CObject
Açıklamalar
Varsayılan sürüm, türetilmiş sınıfınızın oluşturucu tarafından otomatik olarak çağrılır.
Sınıfınız serileştirilebilirse (makroyu IMPLEMENT_SERIAL içerir), sınıf bildiriminizde varsayılan bir oluşturucuya (bağımsız değişken içermeyen bir oluşturucu) sahip olmanız gerekir. Varsayılan bir oluşturucuya ihtiyacınız yoksa, özel veya korumalı bir "boş" oluşturucu bildirin. Daha fazla bilgi için bkz . Kullanma CObject.
Standart C++ varsayılan sınıf kopyası oluşturucu, üyeye üye kopya yapar. Özel CObject kopya oluşturucusunun varlığı, sınıfınızın kopya oluşturucusunun gerekli olması ancak kullanılabilir olmaması durumunda derleyici hata iletisini garanti eder. Sınıfınız bu özelliği gerektiriyorsa bir kopya oluşturucu sağlayın.
Örnek
Örneklerde CObject kullanılan sınıfın CAge listesi için bkzCObList::CObList.
// Create a CAge object using the default constructor.
CAge age1;
// Create a CAge object using the copy constructor.
CAge age2(age1);
CObject::Dump
Nesnenizin içeriğini bir CDumpContext nesneye döküm eder.
virtual void Dump(CDumpContext& dc) const;
Parametreler
dc
Genellikle döküm için afxDumptanılama dökümü bağlamı.
Açıklamalar
Kendi sınıfınızı yazarken, kendiniz ve sınıfınızın diğer kullanıcıları için tanılama hizmetleri sağlamak üzere işlevini geçersiz kılmalısınız Dump . geçersiz kılınan Dump genellikle türetilmiş sınıfa özgü veri üyelerini yazdırmadan önce temel sınıfının işlevini çağırır Dump . CObject::Dumpsınıfınız veya IMPLEMENT_SERIAL makroyu IMPLEMENT_DYNAMIC kullanıyorsa sınıf adını yazdırır.
Not
İşleviniz Dump çıktısının sonunda yeni satır karakteri yazdırmamalıdır.
Dump çağrıları yalnızca Microsoft Foundation Sınıf Kitaplığı'nın Hata Ayıklama sürümünde anlamlıdır. Koşullu derleme için deyimleri ile çağrıları, işlev bildirimlerini ve işlev uygulamalarını köşeli ayraçlamalısınız#ifdef _DEBUG#endif.
Dump bir const işlev olduğundan, döküm sırasında nesne durumunu değiştirmenize izin verilmez.
Ekleme () işleci, işaretçi CObject eklendiğinde çağırırDump.<<CDumpContext
Dump nesnelerin yalnızca "ansiklik" dökümünü sağlar. Örneğin, bir nesne listesinin dökümünü alabilirsiniz, ancak nesnelerden biri listenin kendisiyse, sonunda yığının taşmasına neden olursunuz.
Örnek
Tüm CObject örneklerde kullanılan sınıfın CAge listesi için bkzCObList::CObList.
void CAge::Dump(CDumpContext& dc) const
{
CObject::Dump(dc);
dc << _T("Age = ") << m_years;
}
CObject::GetRuntimeClass
Bu nesnenin CRuntimeClass sınıfına karşılık gelen yapıyı döndürür.
virtual CRuntimeClass* GetRuntimeClass() const;
Dönüş Değeri
Bu nesnenin sınıfına CRuntimeClass karşılık gelen yapıya ilişkin bir işaretçi; hiçbir zaman NULL.
Açıklamalar
Türetilmiş her CObjectsınıf için bir CRuntimeClass yapı vardır. Yapı üyeleri aşağıdaki gibidir:
LPCSTR m_lpszClassNameASCII sınıf adını içeren null olarak sonlandırılan bir dize.int m_nObjectSizeNesnenin bayt cinsinden boyutu. Nesne, ayrılan belleği işaret eden veri üyelerine sahipse, bu belleğin boyutu dahil değildir.UINT m_wSchemaŞema numarası ( seri durumdan çıkarılamayan sınıflar için -1). Şema numarasınınIMPLEMENT_SERIALaçıklaması için makroya bakın.CObject* (PASCAL* m_pfnCreateObject)()Sınıfınızın nesnesini oluşturan varsayılan oluşturucuya yönelik bir işlev işaretçisi (yalnızca sınıfı dinamik oluşturmayı destekliyorsa geçerlidir; aksi takdirde döndürürNULL).CRuntimeClass* (PASCAL* m_pfn_GetBaseClass )()Uygulamanız MFC'nin AFXDLL sürümüne dinamik olarak bağlıysa, temel sınıfın yapısını döndürenCRuntimeClassbir işlev işaretçisi.CRuntimeClass* m_pBaseClassUygulamanız MFC'ye statik olarak bağlıysa, temel sınıfınCRuntimeClassyapısına bir işaretçi.
Bu işlev, sınıf uygulamasında , IMPLEMENT_DYNCREATEveya IMPLEMENT_SERIAL makrosunun kullanılmasını IMPLEMENT_DYNAMICgerektirir. Aksi takdirde yanlış sonuçlar alırsınız.
Örnek
Tüm CObject örneklerde kullanılan sınıfın CAge listesi için bkzCObList::CObList.
CAge a(21);
CRuntimeClass* prt = a.GetRuntimeClass();
ASSERT(strcmp(prt->m_lpszClassName, "CAge") == 0);
CObject::IsKindOf
Bu nesnenin belirli bir sınıfla ilişkisini sınar.
BOOL IsKindOf(const CRuntimeClass* pClass) const;
Parametreler
pClass
Türetilmiş sınıfınızla CObjectilişkilendirilmiş bir CRuntimeClass yapıya işaretçi.
Dönüş Değeri
Nesne sınıfa karşılık geliyorsa sıfır olmayan; aksi takdirde 0.
Açıklamalar
Bu işlev pClass , (1) öğesinin belirtilen sınıfın bir nesnesi olup olmadığını veya (2) belirtilen sınıftan türetilmiş bir sınıfın nesnesi olup olmadığını test eder. Bu işlev yalnızca , DECLARE_DYNCREATEveya DECLARE_SERIAL makro ile DECLARE_DYNAMICbildirilen sınıflar için çalışır.
C++ polimorfizmi özelliğini yendiğinden bu işlevi kapsamlı olarak kullanmayın. Bunun yerine sanal işlevleri kullanın.
Örnek
Tüm CObject örneklerde kullanılan sınıfın CAge listesi için bkzCObList::CObList.
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
Bu nesnenin serileştirme için uygun olup olmadığını sınar.
BOOL IsSerializable() const;
Dönüş Değeri
Bu nesne seri hale getirilebiliyorsa sıfır olmayan; aksi takdirde 0.
Açıklamalar
Bir sınıfın serileştirilebilir olması için bildirimi makroyu DECLARE_SERIAL ve uygulama makroyu IMPLEMENT_SERIAL içermelidir.
Not
Bu işlevi geçersiz kılma.
Örnek
Tüm CObject örneklerde kullanılan sınıfın CAge listesi için bkzCObList::CObList.
CAge a(21);
ASSERT(a.IsSerializable());
CObject::operator delete
Kitaplığın Yayın sürümü için işleç, işleci delete newtarafından ayrılan belleği serbest bırakır.
void PASCAL operator delete(void* p);
void PASCAL operator delete(
void* p,
void* pPlace);
void PASCAL operator delete(
void* p,
LPCSTR lpszFileName,
int nLine);
Açıklamalar
Hata ayıklama sürümünde, operatör delete bellek sızıntılarını algılamak için tasarlanmış bir ayırma izleme düzenine katılır.
Kod satırını kullanıyorsanız
#define new DEBUG_NEW
içindeki uygulamalarınızdan önce. CPP dosyası, ardından üçüncü sürümü delete kullanılır ve dosya adı ve satır numarası daha sonra raporlama için ayrılan blokta depolanır. Ek parametreleri sağlama konusunda endişelenmenize gerek yoktur; bir makro bunu sizin için halleder.
Hata Ayıklama modunda kullanmasanız DEBUG_NEW bile, yukarıda açıklanan kaynak dosya satır numarası raporlaması olmadan yine de sızıntı algılaması alırsınız.
ve deleteişleçlerini new geçersiz kılarsanız, bu tanılama özelliğini kaybedersiniz.
Örnek
Örneklerde CObject kullanılan sınıfın CAge listesi için bkzCObList::CObList.
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
Kitaplığın Yayın sürümü için işleç new , benzer şekilde en uygun bellek ayırmayı mallocyapar.
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);
Açıklamalar
Hata ayıklama sürümünde, operatör new bellek sızıntılarını algılamak için tasarlanmış bir ayırma izleme düzenine katılır.
Kod satırını kullanıyorsanız
#define new DEBUG_NEW
içindeki uygulamalarınızdan önce. CPP dosyası, ardından ikinci sürümü new kullanılır ve dosya adı ve satır numarası daha sonra raporlama için ayrılan blokta depolanır. Ek parametreleri sağlama konusunda endişelenmenize gerek yoktur; bir makro bunu sizin için halleder.
Hata Ayıklama modunda kullanmasanız DEBUG_NEW bile, yukarıda açıklanan kaynak dosya satır numarası raporlaması olmadan yine de sızıntı algılaması alırsınız.
Not
Bu işleci geçersiz kılarsanız, öğesini de geçersiz kılmalısınız delete. Standart kitaplık _new_handler işlevini kullanmayın.
Örnek
Örneklerde CObject kullanılan sınıfın CAge listesi için bkzCObList::CObList.
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
Bu nesneyi bir arşivden veya arşivden okur veya yazar.
virtual void Serialize(CArchive& ar);
Parametreler
ar
' CArchive a veya 'den seri hale getirmek için bir nesne.
Açıklamalar
Seri hale getirmek istediğiniz her sınıf için geçersiz kılın Serialize . Geçersiz kılınan Serialize önce kendi temel sınıfının işlevini çağırmalıdır Serialize .
Makroyu DECLARE_SERIAL sınıf bildiriminizde ve makroyu IMPLEMENT_SERIAL uygulamada da kullanmanız gerekir.
Arşivin yüklenip yüklenmediğini veya depolanıp depolmadığını belirlemek için veya CArchive::IsStoring kullanınCArchive::IsLoading.
Serializeve CArchive::WriteObjecttarafından CArchive::ReadObject çağrılır. Bu işlevler ekleme işleci ( <<) ve ayıklama işleci ( >>) ile CArchive ilişkilendirilir.
Serileştirme örnekleri için Bir Nesneyi Seri Hale Getirme makalesine bakın.
Örnek
Tüm CObject örneklerde kullanılan sınıfın CAge listesi için bkzCObList::CObList.
void CAge::Serialize(CArchive& ar)
{
CObject::Serialize(ar);
if(ar.IsStoring())
ar << m_years;
else
ar >> m_years;
}