C++晋升之dynamic_cast
来源:互联网 发布:ubuntu卡在logo界面 编辑:程序博客网 时间:2024/05/01 05:58
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.慎用,移植性低
0 0
- C++晋升之dynamic_cast
- C++晋升之dynamic_cast
- 【C/C++学习】之五、dynamic_cast
- C++dynamic_cast
- 学习晋升之路
- 程序员晋升之路
- C++晋升之static_cast
- C++晋升之typeid
- C++晋升之static_cast
- 【C/C++学习】之二、static_cast和dynamic_cast、reinterpret_cast
- 程序员的晋升之路
- C++晋升之配对编程
- Java技术晋升之路
- android技术晋升之道
- c++_static_cast and dynamic_cast
- c++: dynamic_cast详解
- 职场智慧之晋升之道
- C++之dynamic_cast
- White spaces are required between publicId and systemId.
- 简单是终极的复杂。
- 【Unix/Linux】【命令】【压缩/打包】打包(压缩)工具 —— tar命令
- PostgreSql递归包含层级level
- 读人是基础,看人是关键,做人最重要
- C++晋升之dynamic_cast
- cocos2d-x3.2里lua文件,调用C++的接口
- 套料软件XSuperNEST
- Java惯用法:枚举
- cmd中输入svn提示svn不是内部或外部命令
- SDL系统操作
- java内嵌数据库
- 个人总结JS
- 在物联网应用中,内嵌式NVM IP 技术需求与发展