CObject Sınıf

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_lpszClassName ASCII sınıf adını içeren null olarak sonlandırılan bir dize.

  • int m_nObjectSize Nesnenin 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ın IMPLEMENT_SERIAL açı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ür NULL).

  • 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üren CRuntimeClass bir işlev işaretçisi.

  • CRuntimeClass* m_pBaseClass Uygulamanız MFC'ye statik olarak bağlıysa, temel sınıfın CRuntimeClass yapı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;
}

Ayrıca bkz.

Hiyerarşi Grafiği