RTTI ialah mekanisme yang membolehkan anda menyemak pewarisan jenis semasa runtime. Menggunakan RTTI, anda boleh mendapatkan maklumat jenis tentang objek, yang berguna untuk mengesahkan perhubungan warisan. Untuk menyemak warisan, gunakan operator typeid untuk mendapatkan maklumat jenis objek. Untuk melakukan penukaran dinamik, gunakan pengendali dynamic_cast, yang menukar penuding kelas asas kepada penuding kelas terbitan, mengembalikan penuding bukan nol jika penukaran berjaya dan penuding nol sebaliknya.
Pewarisan fungsi C++ dijelaskan secara terperinci: Cara menggunakan RTTI untuk menyemak perhubungan warisan jenis
Maklumat jenis masa jalan (RTTI) ialah mekanisme yang membolehkan anda mendapatkan maklumat jenis tentang objek semasa program C++ sedang melaksanakan. Ini berguna untuk menyemak perhubungan warisan jenis, seperti semasa penggantian fungsi maya atau penukaran jenis.
Asas RTTI
Untuk menggunakan RTTI, anda perlu memasukkan fail pengepala <typeinfo>
. Ini akan memberi anda dua kelas berguna: typeid
dan dynamic_cast
. <typeinfo>
头文件。这将为您提供两个有用的类:typeid
和 dynamic_cast
。
检查继承关系
要检查对象是否继承自其他类,您可以使用 typeid
运算符。该运算符返回一个 typeid
对象,其中包含有关对象类型的详细信息。
例如,以下代码片段检查 obj
是否是 Foo
类的实例:
#include <typeinfo> class Foo {}; int main() { Foo obj; if (typeid(obj) == typeid(Foo)) { std::cout << "obj is an instance of Foo" << std::endl; } else { std::cout << "obj is not an instance of Foo" << std::endl; } return 0; }
这段代码将输出以下内容:
obj is an instance of Foo
动态转换
RTTI 还允许您在运行时将基类指针转换为派生类指针。为此,您可以使用 dynamic_cast
运算符。
dynamic_cast
运算符接受一个指向基类的指针作为它的第一个参数,并返回一个指向派生类的指针作为它的结果。如果转换成功,dynamic_cast
将返回一个指向派生类实例的非空指针。否则,它将返回空指针。
例如,以下代码片段将 foo
指针动态转换为 Bar
类指针:
#include <typeinfo> class Foo {}; class Bar : public Foo {}; int main() { Foo* foo = new Foo(); Bar* bar = dynamic_cast<Bar*>(foo); if (bar) { std::cout << "foo was successfully cast to Bar" << std::endl; } else { std::cout << "foo could not be cast to Bar" << std::endl; } delete foo; return 0; }
这段代码将输出以下内容:
foo could not be cast to Bar
因为 foo
指向的是一个 Foo
类的实例,而不是一个 Bar
typeid
. Operator ini mengembalikan objek typeid
yang mengandungi butiran tentang jenis objek. 🎜🎜Sebagai contoh, coretan kod berikut menyemak sama ada obj
ialah contoh kelas Foo
: 🎜rrreee🎜Kod ini akan mengeluarkan yang berikut: 🎜rrreee🎜🎜Penukaran dinamik 🎜🎜🎜 RTTI juga membenarkan anda menukar penuding kelas asas kepada penuding kelas terbitan semasa masa jalan. Untuk melakukan ini, anda boleh menggunakan operator dynamic_cast
. Pengendali 🎜🎜dynamic_cast
menerima penuding ke kelas asas sebagai hujah pertamanya dan mengembalikan penuding kepada kelas terbitan sebagai hasilnya. Jika pelakon berjaya, dynamic_cast
mengembalikan penuding bukan nol kepada contoh kelas terbitan. Jika tidak, ia mengembalikan penunjuk nol. 🎜🎜Sebagai contoh, coretan kod berikut secara dinamik menukar penuding foo
kepada penuding kelas Bar
: 🎜rrreee🎜Kod ini akan mengeluarkan yang berikut: 🎜rrreee🎜Oleh kerana foo
menunjuk ke contoh kelas Foo
, bukan contoh kelas Bar
. 🎜Atas ialah kandungan terperinci Penjelasan terperinci tentang warisan fungsi C++: Bagaimana menggunakan RTTI untuk menyemak hubungan warisan jenis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!