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++晋升之dynamic_cast的更多相关文章

  1. RTTI: dynamic_cast typeid

    dynamic_cast:将基类类型的指针向派生类指针安全转换.多用于下行转换.上行转换时,和static_cast是一样的.C++类型转换看这里.而const_cast用来修改类型的const或vo ...

  2. c++ 数据类型转换: static_cast dynamic_cast reinterpret_cast const_cast

    c++ 数据类型转换: static_cast dynamic_cast reinterpret_cast const_cast  [版权声明]转载请注明出处 http://www.cnblogs.c ...

  3. C++ dynamic_cast对指针类型的转换

    C8-3 三角形还是长方形? (100.0/100 points) 题目描述 在多态概念中,基类的指针既可以指向基类的对象,又可以指向派生类的对象.我们可以使用dynamic_cast类型转换操作符来 ...

  4. dynamic_cast 和 static_cast 隐式类型转换的区别

    首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 第1部分. 隐式类型转换 又称为“标准转换”,包括以下几种情况:1) 算术转换(Arithmetic conversion ...

  5. 《Google想出了一个决定人员晋升的算法,然后就没有然后了......》有感

    Prasad Setty 是 Google People Analytics 团队的副总裁.7 年前 Google 成立的这支团队的职责是收集和利用数据来支撑公司的管理实践.其使命很简单,即基于数据和 ...

  6. C++ 中dynamic_cast&lt;&gt;的使用方法小结 -判断类型-rtti

    将一个基类对象指针(或引用)cast到继承类指针,dynamic_cast会根据基类指针是否真正指向继承类指针来做相应处理          即会作一定的判断.        对指针进行dynamic ...

  7. C++强制类型转换操作符 dynamic_cast

    dynamic_cast是四个强制类型转换操作符中最特殊的一个,它支持运行时识别指针或引用. >>>>>>>>>>>编译器的RTTI设 ...

  8. static_cast、dynamic_cast、reinterpret_cast、const_cast以及C强制类型转换的区别

    static_cast 1. 基础类型之间互转.如:float转成int.int转成unsigned int等 2. 指针与void*之间互转.如:float*转成void*.CBase*转成void ...

  9. c++强制类型转换:dynamic_cast、const_cast 、static_cast、reinterpret_cast

    c++强制类型转换:dynamic_cast.const_cast .static_cast.reinterpret_cast 博客分类: C/C++ CC++C#编程数据结构  dynamic_ca ...

随机推荐

  1. SPField的GetValidatedString方法没有被调用

    当我们开发自定义类型的Field时,可能会用到GetValidatedString这个方法. 但是有时候这个方法并没被调用 原因是: 当Field的Value为null时,该方法不会被调用 解决办法: ...

  2. PHP - 使用pear的HTTP_Upload包进行上传

    前台代码: <html> <head> <title>上传文件</title> </head> <body> <form ...

  3. asp.net导出Excel类库

    using System; using System.Collections.Generic; using System.Reflection; using System.Web; using Exc ...

  4. javascript每日一练(五)——BOM

    一.BOM打开,关闭窗口 window.open(); window.close(); <!doctype html> <html> <head> <meta ...

  5. github上的QT源码,必要的时候还是应该看一下,仅凭猜测很容易出错

    QCoreApplication::processEvents 他处理的时候拿的是current不是qAppqApp的话,才是和主线程密切相关的 一直觉得QT源码复杂,有点怕,所以没怎么看 我也看不懂 ...

  6. log4net学习目录

    log4net是用来记录日志的,日志是用来帮助我们排除错误和异常的.这是我们编写软件必须要用到的东西,前面总结了一些有关日志和log4net的文章,在这整理个目录东大家参考. C#日志工具汇总 log ...

  7. 如何使用NArrange进行代码优化

    Narrange是一个.NET代码管理工具.它可以对源代码自动进行美化和把类成员分成一个组.区域.目前支持C#.VB.NET,将来会支持更多.NET上的语言. 主要的作用是: ◆ 减少程序员的开发时间 ...

  8. 操作3 mongodb和mysql 开启慢查询日志 ,以及mongodb从配置文件启动

    1. mongodb从配置文件启动 创建配置文件:/usr/local/mongodb/etc/mongodb.conf 配置文件的内容为: #Directory and relavent set d ...

  9. Debian/Ubuntu Linux 下安装LLVM/Clang 编译器

    第一步,首先编辑 /etc/apt/sources.list,增加下面源: (加入源后务必执行apt-get update,假设有错误提示,先执行第二步,然后apt-get update) Debia ...

  10. xml总结图--(来自传智播客视频资料)