Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menentukan Jenis Objek pada Runtime dalam C?

Bagaimanakah Saya Boleh Menentukan Jenis Objek pada Runtime dalam C?

Patricia Arquette
Patricia Arquetteasal
2024-12-13 19:50:16357semak imbas

How Can I Determine an Object's Type at Runtime in C  ?

Mencari Jenis Objek dalam C

Jenis objek boleh ditentukan menggunakan dynamic_cast. Kaedah ini secara dinamik menghantar datum daripada satu penuding atau jenis rujukan kepada yang lain, mengesahkan kesahihan pelakon semasa masa jalan.

Penggunaan:

Untuk menghantar ke jenis penuding:

TYPE* dynamic_cast<TYPE*>(object);

Untuk menghantar ke rujukan jenis:

TYPE& dynamic_cast<TYPE&>(object);

Keputusan:

  • Jika lakonan berjaya dan objek adalah daripada jenis yang dikehendaki, hasilnya ialah penunjuk atau rujukan kepada objek.
  • Jika lakonan tidak berjaya (objek bukan jenis yang diingini), hasilnya adalah NULL untuk balingan penunjuk dan melontar pengecualian bad_cast untuk cast rujukan.

Maklumat Jenis Waktu Jalan (RTTI)

Dynamic_cast bergantung pada RTTI, iaitu hanya tersedia untuk kelas polimorfik (iaitu, kelas yang mempunyai sekurang-kurangnya satu kaedah maya). Dalam praktiknya, ini bukanlah had yang ketara, kerana kebanyakan kelas asas mempunyai pemusnah maya untuk pembersihan yang betul dalam kelas terbitan.

Contoh:

Berikut ialah contoh menggunakan dynamic_cast untuk menyemak sama ada objek adalah jenis B:

class A {};
class B : public A {
public:
    void b_function() {}
};

void func(A& obj) {
    B* b_ptr = dynamic_cast<B*>(&obj);
    if (b_ptr != nullptr) {
        b_ptr->b_function(); // Object is of type B
    } else {
        std::cout << "Object is not of type B" << std::endl;
    }
}

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Jenis Objek pada Runtime dalam C?. 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