C++学习(二六四)RTTI

本文介绍了C++中的运行时类型识别(RTTI)机制,包括其产生的原因、作用以及如何使用typeid和dynamic_cast操作符。RTTI允许在运行时检查对象的实际类型,这对于多态性编程至关重要。通过RTTI,程序员可以安全地进行类型转换并获取类型信息。

Run Time Type Identification,

通过运行时类型识别,程序能够使用基类的指针或引用来检查着这些指针或引用所指的对象的实际派生类型。

为什么会出现RTTI这一机制,这和C++语言本身有关系。和很多其他语言一样,C++是一种静态类型语言。其数据类型是在编译期就确定的,不能在运行时更改。然而由于面向对象程序设计中多态性的要求,C++中的指针或引用(Reference)本身的类型,可能与它实际代表(指向或引用)的类型并不一致。有时我们需要将一个多态指针转换为其实际指向对象的类型,就需要知道运行时的类型信息,这就产生了运行时类型识别的要求。和Java相比,C++要想获得运行时类型信息,只能通过RTTI机制,并且C++最终生成的代码是直接与机器相关的。

RTTI提供了两个非常有用的操作符:typeid和dynamic_cast。

typeid操作符,返回指针和引用所指的实际类型;

dynamic_cast操作符,将基类类型的指针或引用安全地转换为其派生类类型的指针或引用。

要使用typeid必须使用头文件<typeinfo>

 

RTTI仅适用于多态类,具有至少一个虚函数。在C++中存在虚函数,也就存在了多态性,对于多态性的对象,在程序编译时可能会出现无法确定对象的类型的情况。当类中含有虚函数时,其基类的指针就可以指向任何派生类的对象,这时就有可能不知道基类指针到底指向的是哪个对象的情况,类型的确定要在运行时利用运行时类型标识做出。RTTI可使用dynamic_cast <>运算符进行安全的类型转换,并在运行时使用typeid运算符和std :: type_info来确定类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值