RTTI est un mécanisme qui vous permet de vérifier l'héritage des types au moment de l'exécution. Grâce à RTTI, vous pouvez obtenir des informations de type sur un objet, ce qui est utile pour vérifier les relations d'héritage. Pour vérifier l'héritage, utilisez l'opérateur typeid pour obtenir les informations de type d'un objet. Pour effectuer des conversions dynamiques, utilisez l'opérateur Dynamic_cast, qui convertit un pointeur de classe de base en pointeur de classe dérivée, renvoyant un pointeur non nul si la conversion réussit et un pointeur nul dans le cas contraire.
L'héritage des fonctions C++ expliqué en détail : Comment utiliser RTTI pour vérifier les relations d'héritage de type
Les informations de type à l'exécution (RTTI) sont un mécanisme qui vous permet d'obtenir des informations de type sur des objets pendant qu'un programme C++ est exécution. Ceci est utile pour vérifier les relations d’héritage de type, comme lors des remplacements de fonctions virtuelles ou des conversions de type.
Bases de RTTI
Pour utiliser RTTI, vous devez inclure le fichier d'en-tête <typeinfo>
. Cela vous donnera deux classes utiles : typeid
et 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
. Cet opérateur renvoie un objet typeid
contenant des détails sur le type de l'objet. 🎜🎜Par exemple, l'extrait de code suivant vérifie si obj
est une instance de la classe Foo
: 🎜rrreee🎜Ce code affichera ce qui suit : 🎜rrreee🎜🎜Conversion dynamique 🎜🎜🎜 RTTI vous permet également de convertir un pointeur de classe de base en pointeur de classe dérivée au moment de l'exécution. Pour ce faire, vous pouvez utiliser l'opérateur dynamic_cast
. L'opérateur 🎜🎜dynamic_cast
accepte un pointeur vers une classe de base comme premier argument et renvoie un pointeur vers une classe dérivée comme résultat. Si le cast réussit, dynamic_cast
renvoie un pointeur non nul vers une instance de la classe dérivée. Sinon, il renvoie un pointeur nul. 🎜🎜Par exemple, l'extrait de code suivant convertit dynamiquement un pointeur foo
en un pointeur de classe Bar
: 🎜rrreee🎜Ce code affichera ce qui suit : 🎜rrreee🎜Parce que foo
pointe vers une instance de la classe Foo
, pas une instance de la classe Bar
. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!