C++中的四类强制转换?
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++中的四类强制转换?相关推荐
- c++中的四种cast转换, dynamic_cast、static_cast、const_cast、reinterpret_cast
C++11之后,C++中就有四种类型转换,分别是 dynamic_cast.static_cast.const_cast.reinterpret_cast,一般用这四种强制转换可以替代在c代码中类似( ...
- vba 定义类_VBA|工程中的四类模块的具体含义与比较
新建一个工作簿后的VBE的工程资源管理器: 可以看到默认的3个工作表对应的模块和工作簿模块ThisWorkbook. 选择sheet1,点击"对象"列表下拉框: 可以看到一个可供选 ...
- C/C++编程知识分享:C++四种强制转换,教你多种类型转换方式!
C语言的强制转换为在数据面前之间加数据类型进行转换,即(目标数据类型)原数据类型.c++为了更好的区分强制转换的类型,达到见其名知其意的效果,共将强制转换分为四种,即 1.static_cast< ...
- C++的四种强制转换
1.背景 大家好,我是酒馆店小二. C风格的强制转换(Type Cast)容易理解,不管什么类型的转换都可以使用使用下面的方式. TypeName res = (NewTypeName)ans; 当然 ...
- C++中的四种强制类型转换
转自CSDN 使用标准C++的类型转换符:static_cast.dynamic_cast.reinterpret_cast.和const_cast. 1 static_cast 用法:static_ ...
- java中的正则表达式类---表情转换实例
Java中的正则表达式类 ________________________________________ public interface MatchResult 匹配操作的结果. 此接口包含用于确 ...
- 项目管理之启动:识别项目中的四类干系人
干系人分析 指对项目干系人进行分析和归类,有针对性地规划管理其核心诉求和期望,让干系人可以更好地参与项目,对项目产生积极影响,从而更好地保障项目目标的成功达成 干系人分析的目的是什么呢? 作为项目管理 ...
- mysql数据库建模方式_SQL Server中的四类数据库建模的方法介绍
SQL Server四类数据仓库建模的方法主要分为以下四类. 第一类是关系数据库的三范式建模,通常我们将三范式建模方法用于建立各种操作型数据库系统. 第二类是Inmon提倡的三范式数据仓库建模,它和操 ...
- java中子类与父类强制转换_java中父类强制转换成子类的错觉
引言:父类引用指向子类对象在java中十分常见,比如: Object object=new a();//a是一个类名 但是有时候我们看见子类引用指向了父类对象,就是上边的反过来,比如 图片中圈1标识的 ...
最新文章
- Android VideoView播放网络视频简介(转)
- Java从零开始学二十三(集合Map接口)
- python plotly 多个表格_Plotly Python - 更改表格
- java zip文件操作,java 关于 zip 文件 的 基本操作
- 抢火车票这个事吧,其实我也能做!(python黑科技)
- python操纵excel的方法_python操作Excel的几种方式
- 深入理解C语言系列之函数传参的那些事儿(函数参数、指针、地址、数组)
- 【整理】C#2.0特性之局部类、空属类型和静态类
- 决策树(九)--极端随机森林及OpenCV源码分析
- ava 8中的新功能特性
- windows下的DataX的安装和使用教程
- 软件工程—需求分析阶段
- HTML干净的网址导航
- php mysql begin_PHP mysqli_begin_transaction() 函数用法及示例
- 利用java图形用户界面实现后台管理系统
- uniapp安卓端禁止截屏允许截屏
- 2018ei期刊目录计算机,科学网—2018年智能计算与信息系统国际会议(ICIS2018)征文期刊EI检索 - 周建国的博文...
- 常见flash讲解——NAND、SPI、EMMC
- python界面教学视频_tkinter 窗口可视化你的 Python程序GUI教学
- vue学习【非父子组件传值问题(Bus/总线/观察者模式)】
热门文章
- Float浮点数的使用和条件
- VMware虚拟机 CentOS 6.5系统安装配置详细图文教程 --技术支持TPshop商城
- ESPCMS基本导航操作
- win7 重启 IIS.
- 工具使用 - Quartus II 管脚分配方法
- 单链表中如何快速删除p指向的节点?( 简单方法:复杂度为O(1) )
- CSP CCF 201709-2 公共钥匙盒(C++)满分代码,有注释
- Codeforces Round #160 (Div. 2) B - Roma and Changing Signs
- SpringBoot入门(1)——创建springBoot项目
- 【云中沙箱】如何快速使用阿里云快速搭建论坛网站?