RTTI

来源:互联网 发布:音乐cms 编辑:程序博客网 时间:2024/06/11 17:36

RTTI(runtime type information)涉及到 typeid()函数,typeinfo类,及dynamic_cast函数

typeid()

该函数的原型为 typeinfo& typeid(object)

函数如何判断object的类型?分为两种情况

1、object是一个实名对象

比如 int a; typeid(a); 

实名对象的判断,就只要看对象声明时的类型是什么就好了。

2、object是一个匿名对象

比如 A* p = new B; typeid(*p);(B继承了A)

这种情况略复杂,尤其是指针指向的对象存在着继承与多态时。

若A没有虚函数,则typeid(*p)判断 *p 为A类对象

若A有虚函数,则判断为B类对象

为什么?答案:与dynamic_cast的判断方法一致,通过虚表指针指向哪个类的虚表判断。

0 0
原创粉丝点击