C++中的rtti
转自http://hi.baidu.com/liyunfeng6666/blog/item/964d822a6af8dce299250a1b.html
RTTI机制运行时确定类对象的类型。。。
1,虚函数,--从写标识自己的函数--基类调用--通过结果多态--
2,typeid操作符,---添加#include <typeinfo>,typeid()会生产一个type_info类的信息,可以调用name()输出类型的名子,判断选择typeid(value) == typeid(value)来判断,对象和类名字。
可能v6运行时出现问题用到typeid的时候遇到这种警告,运行的时候就会出现致命错误:
解决方法:在vc6中. /Project - settings... - C/C++ /在Category那里选 C++ Language /再在下边勾上 Enable Run-Time Type
3,下转型时用,运用dynamic_cast,如果转化不成功返回0
因为RTTI(typeid和dynamic_cast都是RTTI的一部分)大部分都是要利用virtual table来实现的,比如在virtual table的第0个索引处存放指向type_info信息的指针。所以如果没有virtual function,那么此class就没有virtual table,所以RTTI也自然就不能正常运行了(那么typeid也就自然不能够正常运行了,而只能根据编译时期的静态类型来进行判断)。
if (x=dynamic_cast<aa*>(b))

浙公网安备 33010602011771号