Mengambil Kelas dari CObject
Artikel ini menjelaskan langkah-langkah minimum yang diperlukan untuk mendapatkan kelas dari CObject. Artikel kelas lainnya CObject
menjelaskan langkah-langkah yang diperlukan untuk memanfaatkan fitur tertentu CObject
, seperti serialisasi dan dukungan penelusuran kesalahan diagnostik.
Dalam diskusi CObject
, istilah "file antarmuka" dan "file implementasi" sering digunakan. File antarmuka (sering disebut file header, atau . File H) berisi deklarasi kelas dan informasi lain yang diperlukan untuk menggunakan kelas . File implementasi (atau . File CPP) berisi definisi kelas serta kode yang mengimplementasikan fungsi anggota kelas. Misalnya, untuk kelas bernama CPerson
, Anda biasanya akan membuat file antarmuka bernama PERSON. H dan file implementasi bernama PERSON. CPP. Namun, untuk beberapa kelas kecil yang tidak akan dibagikan di antara aplikasi, terkadang lebih mudah untuk menggabungkan antarmuka dan implementasi menjadi satu . File CPP.
Anda dapat memilih dari empat tingkat fungsionalitas saat mendapatkan kelas dari CObject
:
Fungsionalitas dasar: Tidak ada dukungan untuk informasi atau serialisasi kelas run-time tetapi menyertakan manajemen memori diagnostik.
Fungsionalitas dasar ditambah dukungan untuk informasi kelas run-time.
Fungsionalitas dasar ditambah dukungan untuk informasi kelas run-time dan pembuatan dinamis.
Fungsionalitas dasar ditambah dukungan untuk informasi kelas run-time, pembuatan dinamis, dan serialisasi.
Kelas yang dirancang untuk digunakan kembali (yang nantinya akan berfungsi sebagai kelas dasar) setidaknya harus menyertakan dukungan kelas run-time dan dukungan serialisasi, jika ada kebutuhan serialisasi di masa mendatang yang diantisipasi.
Anda memilih tingkat fungsionalitas dengan menggunakan makro deklarasi dan implementasi tertentu dalam deklarasi dan implementasi kelas yang Anda dapatkan dari CObject
.
Tabel berikut ini memperlihatkan hubungan di antara makro yang digunakan untuk mendukung serialisasi dan informasi run-time.
Makro yang Digunakan untuk Informasi Serialisasi dan Run-Time
Makro yang digunakan | CObject::IsKindOf | CRuntimeClass:: CreateObject |
CArchive::operator>> CArchive::operator<< |
---|---|---|---|
Fungsionalitas dasar CObject |
Tidak | No | No |
DECLARE_DYNAMIC |
Ya | No | No |
DECLARE_DYNCREATE |
Ya | Ya | No |
DECLARE_SERIAL |
Ya | Ya | Ya |
Untuk menggunakan fungsionalitas CObject dasar
Gunakan sintaks C++ normal untuk memperoleh kelas Anda dari
CObject
(atau dari kelas yang berasal dariCObject
).Contoh berikut menunjukkan kasus paling sederhana, derivasi kelas dari
CObject
:class CSimple : public CObject { // add CSimple-specific members and functions... };
Namun, biasanya, Anda mungkin ingin mengambil alih beberapa CObject
fungsi anggota untuk menangani spesifik kelas baru Anda. Misalnya, Anda mungkin biasanya ingin mengambil Dump
alih fungsi CObject
untuk menyediakan output penelusuran kesalahan untuk konten kelas Anda. Untuk detail tentang cara mengambil Dump
alih , lihat artikel Kustomisasi Pembuangan Objek. Anda mungkin juga ingin mengambil AssertValid
alih fungsi CObject
untuk menyediakan pengujian yang disesuaikan untuk memvalidasi konsistensi anggota data objek kelas. Untuk deskripsi cara mengambil alih AssertValid
, lihat ASSERT_VALID MFC dan CObject::AssertValid.
Artikel Menentukan Tingkat Fungsionalitas menjelaskan cara menentukan tingkat fungsionalitas lain, termasuk informasi kelas run-time, pembuatan objek dinamis, dan serialisasi.