Rumah  >  Artikel  >  Java  >  Bagaimana untuk Mencapai Fungsi `instanceof` Java dalam C : `dynamic_cast` dan Alternatif?

Bagaimana untuk Mencapai Fungsi `instanceof` Java dalam C : `dynamic_cast` dan Alternatif?

Barbara Streisand
Barbara Streisandasal
2024-11-01 08:13:02568semak imbas

How to Achieve Java's `instanceof` Functionality in C  : `dynamic_cast` and Alternatives?

C Setara dengan Java's Instanceof: dynamic_cast and Alternative Approaches

Java's instanceof operator membenarkan anda menyemak sama ada objek ialah contoh tertentu kelas atau subkelasnya. Dalam C , anda boleh mencapai kefungsian yang serupa menggunakan dynamic_cast.

<code class="cpp">if (NewType* v = dynamic_cast<NewType*>(old)) {
  // Cast succeeded, old is a NewType object
  v->doSomething();
}</code>

Pendekatan ini memerlukan maklumat jenis masa jalan (RTTI) untuk didayakan dalam pengkompil anda. Walau bagaimanapun, dynamic_cast boleh datang pada kos prestasi.

Pendekatan Alternatif:

  • Fungsi Maya: Tentukan fungsi maya dalam pangkalan kelas yang dilaksanakan oleh setiap subkelas dengan tingkah laku khususnya. Ini membolehkan anda menyemak jenis objek pada masa jalan dan memanggil fungsi yang sesuai.
  • Corak Pelawat: Cipta kelas pelawat yang mengandungi gelagat khusus untuk subkelas yang berbeza. Dengan melawat objek bersama pelawat, anda boleh melakukan tindakan khusus kepada subkelas tanpa menukar antara muka objek.
  • Semakan Jenis Enum: Tambah enum yang mewakili jenis kelas anda yang mungkin. Semak jenis menggunakan pernyataan suis atau pernyataan bersyarat:
<code class="cpp">switch (old->getType()) {
  case BOX:
    // old is a Box object
    break;
  case SPECIAL_BOX:
    // old is a SpecialBox object
    break;
}</code>

Pendekatan ini tidak memerlukan RTTI tetapi tidak sesuai untuk warisan berbilang peringkat.

Nota: Pertimbangkan keperluan pemeriksaan jenis dinamik kerana ia boleh menunjukkan isu reka bentuk. Alternatif seperti fungsi maya atau pendekatan enum mungkin memberikan reka bentuk dan prestasi yang lebih baik dalam banyak kes.

Atas ialah kandungan terperinci Bagaimana untuk Mencapai Fungsi `instanceof` Java dalam C : `dynamic_cast` dan Alternatif?. 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