C++ 运行时类型识别 RTTI

本文介绍了C++中的运行时类型识别(RTTI)机制,重点讲解了dynamic_cast运算符和typeid运算符的用法。dynamic_cast用于安全的基类到派生类的转换,支持交叉转换和多继承,而typeid则用于获取对象的类型信息,特别是在涉及虚函数时。RTTI在实现类的operator==操作符时非常有用,通过typeid检查类型并利用dynamic_cast进行安全的成员比较。
摘要由CSDN通过智能技术生成

运行时类型识别(RTTI)功能由两个运算符实现

  • typeid运算符,用于返回表达式的类型
  • dynamic_cast运算符,用于将基类的指针或引用安全地转换成派生类的指针或引用

特别适用于以下情况:想用基类的指针或引用执行某个派生类的非虚函数。一般来说,只要有可能应尽量使用虚函数。

dynamic_cast

dynamic_cast<type*>(e)
dynamic_cast<type&>(e)
dynamic_cast<type&&>(e)

type与e的类型要么具有派生关系,要么类型相同。否则会转换失败。若指针类型的转换失败了,返回0。若引用类型的转换失败了,返回bad_cast异常

#include<iostream>
using namespace std;
class Base {
public:
       void f();
       virtual ~Base() {}
private:
       int val_;
};
class Derived :public Base {
public:
       void g();
       virtual ~Derived() {}
};
void Base::f() {
       cout << "I'm Base" << endl;
}
void Derived::g() {
       cout << "I'm Derived" << endl;
}
int main() {
       Base* bp = new Derived;
       if (Derived* dp = dynamic_cast<Deri
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值