C++晋升之dynamic_cast
2024-08-22 03:12:14
danamic_cast 动态类型转换
----RTTI提供的的操作符
----动态:在执行阶段
----类型转换:检測指针或引用类型,true->转换
----体现价值的地方:用于多态
----如果出现这种情况:
父类A虚函数aa()指针p,子类B指针p1,无关类C指针p2
你的p1和p2在一起传进函数
函数的功能将传进来的指针强转成A类的,调用函数aa()
C类没有继承A,这样会崩溃
前提:1.C和B里没有专门用来鉴别的成员变量
2.不能让C也继承A
----工作中遇到的问题:
用第三方的软件、库,对方有些没完好你有要用出现上面如果的那种情况
解决:
方法一:前提里的那两个绕圈子的方法
缺点:多了个成员变量或者是多复用了一遍父类
方法二:dynamic_cast<T>(T1)动态强制转换(引出主题了)
用:if( p = dynamic_cast<A*>(p1))
p是父类指针 A是父类 p1是子类指针 TRUE
仅仅能这样写,用VS測出的
注意事项:
1.p 和 A*的位置要相应,p处写的指针是A*处的类的,否则
编译的时候报的错
2.p的位置换成子类指针,A*位置换为子类,后面是父类对象
结果:不报错,是false,和我们想要用动态转换类型的结果要背离
3.父类必须有虚函数,否则
4.子类指针必须new,父类无所谓,否则
5.用VS的时候我没有去打开什么RTTI的选项,其它的编译器有,须要设置里打开
打开RTTI执行效率会低,对于JAVA和C#,不存在这个问题(由于本来就非常慢)
6.慎用,移植性低
最新文章
- 任意多边形切割/裁剪(附C#代码实现)
- python2.7 内置ConfigParser支持Unicode读写
- 1、NoSQL概述
- SpringMVC文件上传实现
- Linux文件打包压缩、解压缩、备份命令使用方法(转载)
- [moka同学摘录]Yii2 csv数据导出扩展
- BZOJ 1043 下落的圆盘
- .30-浅析webpack源码之doResolve事件流(1)
- 【django基础补充之URL,视图,模版】
- Java之List排序出错
- RIP 实验
- SoapUI 学习总结-02 断言
- 关于11G DataGuard 日志传输的案例
- kd-tree题目总结
- 设置eclipse代码自动补全功能
- http之cdn介绍
- XenServer日志清理方法
- MYSQL数据库在Windows系统中重置root密码
- day 73 初学vue (1)
- Git基础 —— Github 的使用
热门文章
- Light OJ 1318 Strange Game 组合数+高速幂+分解因子
- 幻世(OurDream)2D图形引擎使用教程8——处理操作输入(2)
- C# 中 双问号??的用法
- 恢复PasswordChar 默认值、取消密码框设置
- hdu 4117 GRE Words (ac自动机 线段树 dp)
- Silverlight技术调查(4)——完成的调查结果
- JSP:JAVA Bean在JSP中的运用
- Magento给产品添加“new”或者折扣数量标签 magento new label. discount label
- 高仿精仿快播应用android源码下载
- 国际化之MessageFormat与占位符