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.
Uyarı
Microsoft Foundation Sınıfları (MFC) kitaplığı desteklenmeye devam ediyor. Ancak artık özellik eklemeyeceğiz veya belgeleri güncelleştirmeyeceğiz.
Bu makalede, çalışma zamanında bir nesnenin sınıfı hakkındaki bilgilere nasıl eriştiği açıklanır.
Uyarı
MFC, Visual C++ 4.0'da sunulan Run-Time Tür Bilgileri (RTTI) desteğini kullanmaz.
Sınıfınızı CObject'ten türetdiyseniz ve CObject'tenSınıf Türetme makalesinde açıklanan DECLARE_IMPLEMENT_DYNAMIC ve DECLARE_DYNCREATE, IMPLEMENT_DYNCREATE ve DECLARE_SERIALveya IMPLEMENT_SERIAL ve makrolarını kullandıysanız, sınıfın CObject çalışma zamanında nesnenin tam sınıfını belirleme yeteneği vardır.
Bu özellik en çok işlev bağımsız değişkenlerinin ek tür denetimi gerektiğinde ve bir nesnenin sınıfına göre özel amaçlı kod yazmanız gerektiğinde kullanışlıdır. Ancak, bu uygulama genellikle sanal işlevlerin işlevselliğini çoğalttığı için önerilmez.
CObject Üye işleviIsKindOf, belirli bir nesnenin belirli bir sınıfa ait olup olmadığını veya belirli bir sınıftan türetilip türetilmediğini belirlemek için kullanılabilir. Bağımsız değişken IsKindOf, sınıfın adıyla CRuntimeClass makroyu kullanarak alabileceğiniz bir RUNTIME_CLASS nesnesidir.
RUNTIME_CLASS makroyu kullanmak için
sınıfı için burada gösterildiği gibi sınıfın
RUNTIME_CLASSadıyla kullanınCObject:CRuntimeClass *pClass = RUNTIME_CLASS(CObject);
Çalışma zamanı sınıf nesnesine doğrudan erişmeniz nadiren gerekir. Daha yaygın bir kullanım, bir sonraki işlem adımında gösterildiği gibi çalışma zamanı sınıf nesnesini IsKindOf fonksiyonuna iletmektir. İşlev, IsKindOf belirli bir sınıfa ait olup olmadığını görmek için bir nesneyi test eder.
IsKindOf işlevini kullanmak için
Sınıfın çalışma zamanı desteğine sahip olduğundan emin olun. Başka bir ifadeyle, sınıfı doğrudan veya dolaylı olarak türetilmiş olmalı ve
CObjectSınıf Türetme makalesinde açıklanan DECLARE_IMPLEMENT_DYNAMICveDECLARE_DYNCREATE,IMPLEMENT_DYNCREATEveDECLARE_SERIALveyaIMPLEMENT_SERIALve makrolarını kullanmalıdır.Bu sınıfın nesneleri için, burada gösterildiği gibi
IsKindOfbağımsız değişkenini oluşturmak amacıylaRUNTIME_CLASSmakrosunu kullanarakCRuntimeClassüye işlevini çağırın: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; }Uyarı
IsKindOf, nesne belirtilen sınıfın veya belirtilen sınıftan türetilmiş bir sınıfın üyesiyse TRUE döndürür.
IsKindOfbirden çok devralmayı veya sanal temel sınıfı desteklemez, ancak gerekirse türetilmiş Microsoft Foundation sınıflarınız için birden çok devralma kullanabilirsiniz.
Çalışma zamanı sınıf bilgilerinin bir kullanımı, nesnelerin dinamik olarak oluşturulmasıdır. Bu işlem Dinamik Nesne Oluşturma makalesinde ele alınılmaktadır.
Serileştirme ve çalışma zamanı sınıf bilgileri hakkında daha ayrıntılı bilgi için MFC ve Serileştirme'deki dosyalar makalelerine bakın.