运行时类型识别
来源:互联网 发布:犀牛软件制作杯子 编辑:程序博客网 时间:2024/05/17 22:25
Q1:运行时类型识别(RTTI)简述
• 通过下面两个操作符实现RTTI:
1) typeid 操作符,返回指针或引用所指对象的实际类型2) dynamic_cast操作符,将基类类型的指针或引用安全的转换为派生类型的指针或引用
对于带虚函数的类,在运行时执行RTTI操作符,对其他类型,在编译时计算RTTI操作符
Q2:dynamic_cast 操作符
• dynamic_cast操作符一次执行两个操作:验证,转换。只有验证被请求的转换有效后,才会进行类型转换
• 如果检测过程中发现转换无效,分为以下两种情况:
1) 若转换到指针类型失败,则 dynamic_cast 的结果是 0 值(值为 0 的指针转换结果也为0)2) 若转换到引用失败,则抛出一个 bad_cast 类型的异常
• 推荐使用方法:
if (Derived * derivedPtr = dynamic_cast<Derived*>(basedPtr)) { } else { }
三个好处:
1) 在 if 内部才会执行派生内操作,在 else 中执行基类操作2) 保证转换与结果测试在同一个表达式中进行3) 在 if 外部不能访问该指针
Q3:typeid操作符
• typeid(e),此处的 e 是任意表达式或类型名
• 如果操作数不是类类型或是没有虚函数的类,则typeid操作符指出操作数的静态类型;若操作数是定义了一个以上的虚函数的类类型,在运行时计算类型
• 只有当操作数是含有虚函数的类类型对象的时候,才返回动态类型信息;若测试指针,返回的是指针静态编译时类型
○ if( typeid ( *bp) == typeid ( Derived )) //正确写法○ if ( typeid (bp) == typeid ( Derived )) //错误写法,此时判断 Base* 与 Derived
• typeid 操作符提供以下几个操作:
1) t1 == t2; 2) t1 != t2; 3) t.name(); //返回C风格字符串,这是类型名字的可显示版本 4) t1.before(t2); //返回指出 t1 是否出现在 t2 之前的 bool值
0 0
- 运行时类型识别
- 运行时类型识别
- 运行时类型识别
- 运行时类型识别
- 运行时类型识别
- 运行时类型识别
- 运行时类型识别
- 运行时类型识别
- 运行时类型识别
- 运行时类型识别(RTTI)
- RTTI 运行时类型识别
- 运行时类型识别(RTTI)
- 运行时类型识别RTTI
- RTTI 运行时类型识别
- RTTI 运行时类型识别
- RTTI 运行时类型识别
- RTTI 运行时类型识别
- RTTI运行时类型识别
- ecshop getRow getAll&n…
- WebDriver拾级而上·之四 操作页面元素
- ECSHOP注册时增加推荐人
- codevs1014
- PHP程序的一些好用的函数方法
- 运行时类型识别
- CSS的position:fixed的使用
- dedecms模板内加入php代码的方法
- ECshop出现错误提示 Warning:…
- 怎么才能让网站的图片不能被游客下…
- 允许phpmyadmin空密码登录的配置方…
- 【JQuery】Ecshop与Jquery冲突的完…
- 屏幕设备环境
- 【ecshop】ECshop2.72修改版权及标…