Rumah >Java >javaTutorial >Bagaimana untuk Mencapai Setara C bagi Operator \'instanceof\' Java?

Bagaimana untuk Mencapai Setara C bagi Operator \'instanceof\' Java?

Linda Hamilton
Linda Hamiltonasal
2024-11-03 21:51:30936semak imbas

How to Achieve the C   Equivalent of Java's

Cara Mencapai C Equivalent of Java's instanceof

Dalam Java, pengendali "instanceof" membenarkan anda untuk menentukan sama ada objek kepunyaan a kelas atau antara muka tertentu. Dalam C , terdapat beberapa kaedah untuk mencapai kefungsian ini.

Penghantaran Dinamik dengan RTTI

Satu pendekatan menggunakan penghantaran dinamik dengan Maklumat Jenis Masa Jalan (RTTI) didayakan. Ini memerlukan anda memasukkan pengepala yang diperlukan:

<code class="cpp">#include <typeinfo>
#include <cxxabi.h></code>

Dan kemudian anda boleh melakukan lakonan dinamik menggunakan:

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

Perhatikan bahawa pendekatan ini memerlukan sokongan RTTI untuk didayakan dalam pengkompil anda .

Fungsi Maya

Kaedah lain ialah menggunakan fungsi maya. Anda boleh menentukan fungsi maya dalam kelas asas dan mengatasinya dalam kelas terbitan. Kemudian, anda boleh menyemak jenis dinamik objek dengan memanggil fungsi mayanya:

<code class="cpp">class Base {
public:
    virtual void doSomething() {}
};

class Derived : public Base {
public:
    void doSomething() override {}
};

...

if(auto* derived = dynamic_cast<Derived*>(old)) {
    derived->doSomething();
}</code>

Suis Jenis

Akhir sekali, anda boleh menggunakan suis jenis untuk menentukan jenis dinamik sesuatu objek. Pendekatan ini bergantung pada kelas type_info:

<code class="cpp">if(old.IsSameAs(typeid(NewType))) {
    // old was safely casted to NewType
    NewType* v = static_cast<NewType*>(old);
    v->doSomething();
}</code>

Pertimbangan

Walaupun kaedah ini menawarkan fungsi yang serupa dengan pengendali "instanceof" Java, adalah penting untuk mengingati pemutus dinamik dan pemeriksaan jenis boleh dikenakan penalti prestasi. Adalah disyorkan untuk mempertimbangkan menggunakan pendekatan alternatif seperti fungsi maya atau suis jenis untuk prestasi yang lebih baik dalam aplikasi kritikal.

Atas ialah kandungan terperinci Bagaimana untuk Mencapai Setara C bagi Operator \'instanceof\' Java?. 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