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!