Bagikan melalui


Struktur CRuntimeClass

Setiap kelas yang berasal dikaitkan CObject dengan CRuntimeClass struktur yang dapat Anda gunakan untuk mendapatkan informasi tentang objek atau kelas dasarnya pada waktu proses.

Sintaks

struct CRuntimeClass

Anggota

Metode Publik

Nama Deskripsi
CRuntimeClass::CreateObject Membuat objek selama run time.
CRuntimeClass::FromName Membuat objek selama run time menggunakan nama kelas yang sudah dikenal.
CRuntimeClass::IsDerivedFrom Menentukan apakah kelas berasal dari kelas yang ditentukan.

Anggota Data Publik

Nama Deskripsi
CRuntimeClass::m_lpszClassName Nama kelas.
CRuntimeClass::m_nObjectSize Ukuran objek dalam byte.
CRuntimeClass::m_pBaseClass Penunjuk ke CRuntimeClass struktur kelas dasar.
CRuntimeClass::m_pfnCreateObject Penunjuk ke fungsi yang secara dinamis membuat objek.
CRuntimeClass::m_pfnGetBaseClass Mengembalikan CRuntimeClass struktur (hanya tersedia saat ditautkan secara dinamis).
CRuntimeClass::m_wSchema Nomor skema kelas.

Keterangan

CRuntimeClass adalah struktur dan karenanya tidak memiliki kelas dasar.

Kemampuan untuk menentukan kelas objek pada waktu proses berguna ketika pemeriksaan jenis tambahan argumen fungsi diperlukan, atau ketika Anda harus menulis kode tujuan khusus berdasarkan kelas objek. Informasi kelas run-time tidak didukung langsung oleh bahasa C++.

CRuntimeClass memberikan informasi tentang objek C++ terkait, seperti penunjuk ke CRuntimeClass kelas dasar dan nama kelas ASCII dari kelas terkait. Struktur ini juga mengimplementasikan berbagai fungsi yang dapat digunakan untuk membuat objek secara dinamis, menentukan jenis objek dengan menggunakan nama yang sudah dikenal, dan menentukan apakah kelas terkait berasal dari kelas tertentu.

Untuk informasi selengkapnya tentang menggunakan CRuntimeClass, lihat artikel Mengakses Informasi Kelas Run-Time.

Hierarki Warisan

CRuntimeClass

Persyaratan

Header: afx.h

CRuntimeClass::CreateObject

Panggil fungsi ini untuk membuat kelas yang ditentukan secara dinamis selama run time.

CObject* CreateObject();

static CObject* PASCAL CreateObject(LPCSTR lpszClassName);

static CObject* PASCAL CreateObject(LPCWSTR lpszClassName);

Parameter

lpszClassName
Nama kelas yang akrab untuk dibuat.

Tampilkan Nilai

Penunjuk ke objek yang baru dibuat, atau NULL jika nama kelas tidak ditemukan atau memori tidak cukup untuk membuat objek.

Keterangan

Kelas yang berasal dari CObject dapat mendukung pembuatan dinamis, yang merupakan kemampuan untuk membuat objek kelas tertentu pada waktu proses. Kelas dokumen, tampilan, dan bingkai, misalnya, harus mendukung pembuatan dinamis. Untuk informasi selengkapnya tentang pembuatan dinamis dan CreateObject anggota, lihat Kelas CObject dan Kelas CObject: Menentukan Tingkat Fungsionalitas.

Contoh

Lihat contoh untuk IsDerivedFrom.

CRuntimeClass::FromName

Panggil fungsi ini untuk mengambil struktur yang CRuntimeClass terkait dengan nama yang sudah dikenal.

static CRuntimeClass* PASCAL FromName(LPCSTR lpszClassName);

static CRuntimeClass* PASCAL FromName(LPCWSTR lpszClassName);

Parameter

lpszClassName
Nama kelas yang akrab berasal dari CObject.

Tampilkan Nilai

Penunjuk ke CRuntimeClass objek, sesuai dengan nama seperti yang diteruskan di lpszClassName. Fungsi mengembalikan NULL jika tidak ada nama kelas yang cocok yang ditemukan.

Contoh

// 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

Panggil fungsi ini untuk menentukan apakah kelas panggilan berasal dari kelas yang ditentukan dalam parameter pBaseClass .

BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;

Parameter

pBaseClass
Nama kelas yang akrab berasal dari CObject.

Tampilkan Nilai

TRUE jika panggilan IsDerivedFrom kelas berasal dari kelas dasar yang strukturnya CRuntimeClass diberikan sebagai parameter; jika tidak FALSE.

Keterangan

Hubungan ditentukan oleh "berjalan" dari kelas anggota naik rantai kelas turunan sampai ke atas. Fungsi ini hanya mengembalikan FALSE jika tidak ada kecocokan yang ditemukan untuk kelas dasar.

Catatan

Untuk menggunakan CRuntimeClass struktur, Anda harus menyertakan makro IMPLEMENT_DYNAMIC, IMPLEMENT_DYNCREATE, atau IMPLEMENT_SERIAL dalam implementasi kelas tempat Anda ingin mengambil informasi objek run-time.

Untuk informasi selengkapnya tentang menggunakan CRuntimeClass, lihat artikel Kelas CObject: Mengakses Informasi Kelas Run-Time.

Contoh

// 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

String null-terminated yang berisi nama kelas ASCII.

Keterangan

Nama ini dapat digunakan untuk membuat instans kelas menggunakan FromName fungsi anggota.

Contoh

Lihat contoh untuk IsDerivedFrom.

CRuntimeClass::m_nObjectSize

Ukuran objek, dalam byte.

Keterangan

Jika objek memiliki anggota data yang menunjuk ke memori yang dialokasikan, ukuran memori tersebut tidak disertakan.

Contoh

Lihat contoh untuk IsDerivedFrom.

CRuntimeClass::m_pBaseClass

Jika aplikasi Anda secara statis menautkan ke MFC, anggota data ini berisi penunjuk ke CRuntimeClass struktur kelas dasar.

Keterangan

Jika aplikasi Anda secara dinamis ditautkan ke pustaka MFC, lihat m_pfnGetBaseClass.

Contoh

Lihat contoh untuk IsDerivedFrom.

CRuntimeClass::m_pfnCreateObject

Penunjuk fungsi ke konstruktor default yang membuat objek kelas Anda.

Keterangan

Pointer ini hanya valid jika kelas mendukung pembuatan dinamis; jika tidak, fungsi mengembalikan NULL.

CRuntimeClass::m_pfnGetBaseClass

Jika aplikasi Anda menggunakan pustaka MFC sebagai DLL bersama, anggota data ini menunjuk ke fungsi yang mengembalikan CRuntimeClass struktur kelas dasar.

Keterangan

Jika aplikasi Anda secara statis menautkan ke pustaka MFC, lihat m_pBaseClass.

Contoh

Lihat contoh untuk IsDerivedFrom.

CRuntimeClass::m_wSchema

Nomor skema ( -1 untuk kelas yang tidak dapat diserialisasi).

Keterangan

Untuk informasi selengkapnya tentang nomor skema, lihat makro IMPLEMENT_SERIAL .

Contoh

Lihat contoh untuk IsDerivedFrom.

Baca juga

Bagan Hierarki
CObject::GetRuntimeClass
CObject::IsKindOf
RUNTIME_CLASS
IMPLEMENT_DYNAMIC
IMPLEMENT_DYNCREATE
IMPLEMENT_SERIAL