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
Lepaskan: 2024-12-13 19:50:16
asal
355 orang telah melayarinya

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);
Salin selepas log masuk

Untuk menghantar ke rujukan jenis:

TYPE& dynamic_cast<TYPE&>(object);
Salin selepas log masuk

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;
    }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan