Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Semak Jenis Objek dalam C Tanpa `instanceof`?

Bagaimanakah Saya Boleh Semak Jenis Objek dalam C Tanpa `instanceof`?

DDD
DDDasal
2024-12-05 17:07:14819semak imbas

How Can I Check Object Types in C   Without `instanceof`?

Menyemak Jenis Objek dalam C : Alternatif kepada contoh Java

Di Java, pengendali instanceof membolehkan pembangun mengesahkan sama ada objek milik kepada kelas tertentu atau subkelasnya. Kefungsian serupa boleh dicapai dalam C menggunakan teknik pengenalan jenis masa jalan (RTTI).

Untuk menyemak sama ada objek daripada jenis tertentu, C menyediakan pengendali dynamic_cast. Operator ini cuba menukar penuding kepada objek kepada jenis yang diingini, dan jika berjaya, ia mengembalikan penuding kepada objek yang dipancarkan; jika tidak, ia mengembalikan penuding nol.

Pertimbangkan coretan kod berikut:

if(NewType* v = dynamic_cast<NewType*>(old)) {
   // old was safely casted to NewType
   v->doSomething();
}

Dalam contoh ini, pengendali dynamic_cast digunakan untuk mencuba penukaran objek jenis lama kepada penunjuk jenis NewType. Jika penukaran berjaya, penuding v menghala ke objek yang ditukar dan kod boleh meneruskan operasi selanjutnya pada objek yang terhasil.

Adalah penting untuk ambil perhatian bahawa menggunakan RTTI memerlukan sokongan daripada pengkompil, dan ia sepatutnya didayakan semasa penyusunan. Selain itu, penggunaan dynamic_cast perlu dipertimbangkan dengan teliti kerana ia memperkenalkan overhed masa jalan tambahan.

Dalam kes di mana RTTI tidak tersedia atau apabila kebimbangan prestasi timbul, penyelesaian boleh digunakan. Satu pendekatan melibatkan mentakrifkan penghitungan yang mewakili semua jenis yang mungkin dan menyemak jenis yang diingini menggunakan static_cast:

if(old->getType() == BOX) {
   Box* box = static_cast<Box*>(old);
   // Do something box specific
}

Kaedah ini, walaupun tidak sefleksibel seperti dynamic_cast, boleh menjadi alternatif yang sesuai dalam situasi tertentu. Walau bagaimanapun, perlu diingat bahawa pendekatan ini tidak mengendalikan berbilang peringkat warisan sepenuhnya dan mungkin memerlukan semakan tambahan untuk kelas terbitan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Semak Jenis Objek dalam C Tanpa `instanceof`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn