C++中的四类强制转换?
例:
class ClassA

{

public:

virtual ~ ClassA()

{
   
     }
   
 virtual void FunctionA()
   
     {
   
     }

};

class ClassB

{
  
  public:
  
  virtual void FunctionB()
 
   {
  
    }

};

class ClassC: public ClassA, public ClassB

{
  
  public:

};

ClassC aObject;
ClassA *pA = &aObject;
ClassB *pB = &aObject;
ClassC *pC = &aObject;
  
假设定义了ClassA* pA2,

下面正确的代码是:BD
A:pA2=static_cast<ClassA*>(pB);

B:void* pVoid=static_cast<void*>(pB);      pA2=static_cast<ClassA*>(pVoid);

C:pA2=pB;

D:pA2=static_cast<ClassA*>(static_cast<ClassC*>(pB));

解析1:
A   两个无关类型指针之间的转换 是不合法的
B  通过void*这个媒介 ,合法
C  直接赋值,无法进行隐式转换,不合法
D  通过继承体系中的一个 做媒介, 上行 下行 合法

解析2:
static_cast(编译器可实现的隐式转换或类层次间的下行转换)、
dynamic_cast(操作数只能为类指针或类引用)、
const_cast(去除const)、
reinterpret_const(一般意义强制转换)

经测试,BD选项都可以通过编译,然而B选项明显不安全。 
  如果想安全的将classB的指针转换到classA的指针,需要将pB的值向前调整sizeof(ClassA)个大小。 
  D选项可以做的。但B选项通过Void直接把pB的值赋值给了pA2,并未进行位置调整,所以说是不安全的。

C++中的四类强制转换?相关推荐

  1. c++中的四种cast转换, dynamic_cast、static_cast、const_cast、reinterpret_cast

    C++11之后,C++中就有四种类型转换,分别是 dynamic_cast.static_cast.const_cast.reinterpret_cast,一般用这四种强制转换可以替代在c代码中类似( ...

  2. vba 定义类_VBA|工程中的四类模块的具体含义与比较

    新建一个工作簿后的VBE的工程资源管理器: 可以看到默认的3个工作表对应的模块和工作簿模块ThisWorkbook. 选择sheet1,点击"对象"列表下拉框: 可以看到一个可供选 ...

  3. C/C++编程知识分享:C++四种强制转换,教你多种类型转换方式!

    C语言的强制转换为在数据面前之间加数据类型进行转换,即(目标数据类型)原数据类型.c++为了更好的区分强制转换的类型,达到见其名知其意的效果,共将强制转换分为四种,即 1.static_cast< ...

  4. C++的四种强制转换

    1.背景 大家好,我是酒馆店小二. C风格的强制转换(Type Cast)容易理解,不管什么类型的转换都可以使用使用下面的方式. TypeName res = (NewTypeName)ans; 当然 ...

  5. C++中的四种强制类型转换

    转自CSDN 使用标准C++的类型转换符:static_cast.dynamic_cast.reinterpret_cast.和const_cast. 1 static_cast 用法:static_ ...

  6. java中的正则表达式类---表情转换实例

    Java中的正则表达式类 ________________________________________ public interface MatchResult 匹配操作的结果. 此接口包含用于确 ...

  7. 项目管理之启动:识别项目中的四类干系人

    干系人分析 指对项目干系人进行分析和归类,有针对性地规划管理其核心诉求和期望,让干系人可以更好地参与项目,对项目产生积极影响,从而更好地保障项目目标的成功达成 干系人分析的目的是什么呢? 作为项目管理 ...

  8. mysql数据库建模方式_SQL Server中的四类数据库建模的方法介绍

    SQL Server四类数据仓库建模的方法主要分为以下四类. 第一类是关系数据库的三范式建模,通常我们将三范式建模方法用于建立各种操作型数据库系统. 第二类是Inmon提倡的三范式数据仓库建模,它和操 ...

  9. java中子类与父类强制转换_java中父类强制转换成子类的错觉

    引言:父类引用指向子类对象在java中十分常见,比如: Object object=new a();//a是一个类名 但是有时候我们看见子类引用指向了父类对象,就是上边的反过来,比如 图片中圈1标识的 ...

最新文章

  1. Android VideoView播放网络视频简介(转)
  2. Java从零开始学二十三(集合Map接口)
  3. python plotly 多个表格_Plotly Python - 更改表格
  4. java zip文件操作,java 关于 zip 文件 的 基本操作
  5. 抢火车票这个事吧,其实我也能做!(python黑科技)
  6. python操纵excel的方法_python操作Excel的几种方式
  7. 深入理解C语言系列之函数传参的那些事儿(函数参数、指针、地址、数组)
  8. 【整理】C#2.0特性之局部类、空属类型和静态类
  9. 决策树(九)--极端随机森林及OpenCV源码分析
  10. ava 8中的新功能特性
  11. windows下的DataX的安装和使用教程
  12. 软件工程—需求分析阶段
  13. HTML干净的网址导航
  14. php mysql begin_PHP mysqli_begin_transaction() 函数用法及示例
  15. 利用java图形用户界面实现后台管理系统
  16. uniapp安卓端禁止截屏允许截屏
  17. 2018ei期刊目录计算机,科学网—2018年智能计算与信息系统国际会议(ICIS2018)征文期刊EI检索 - 周建国的博文...
  18. 常见flash讲解——NAND、SPI、EMMC
  19. python界面教学视频_tkinter 窗口可视化你的 Python程序GUI教学
  20. vue学习【非父子组件传值问题(Bus/总线/观察者模式)】

热门文章

  1. Float浮点数的使用和条件
  2. VMware虚拟机 CentOS 6.5系统安装配置详细图文教程 --技术支持TPshop商城
  3. ESPCMS基本导航操作
  4. win7 重启 IIS.
  5. 工具使用 - Quartus II 管脚分配方法
  6. 单链表中如何快速删除p指向的节点?( 简单方法:复杂度为O(1) )
  7. CSP CCF 201709-2 公共钥匙盒(C++)满分代码,有注释
  8. Codeforces Round #160 (Div. 2) B - Roma and Changing Signs
  9. SpringBoot入门(1)——创建springBoot项目
  10. 【云中沙箱】如何快速使用阿里云快速搭建论坛网站?