一、 static_cast运算符
用法:static_cast < type-id > ( expression )
该运算符把expression 转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:
①用于类层次结构中基类和子类之间指针或引用的转换。  进行上行转换(把子类的指针或引用转换成基类表示)是安全的; 
②用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。
③把空指针转换成目标类型的空指针。
④把任何类型的表达式转换成void类型。
注意:static_cast不能转换掉const、volitale、或者__unaligned属性。 二、 dynamic_cast 运算符
用法:dynamic_cast < type-id > ( expression )
该运算符把expression 转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void *;
如果type-id是类指针类型,那么expression 也必须是一个指针,如果type-id是一个引用,那么expression 也必须是一个引用。
dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。
在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;
进行下行转换(把基类指针或引用转换成子类表示)时,由于没有动态类型检查,所以是不安全的。
(由子类转基类) 上行 ,或者叫由宽变窄
(基类转派生类)下行 ,由窄变宽 三、reinterpret_cast运算符
用法:reinterpret_cast<type-id> (expression)
type-id必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,在把该整数转换成原类型的指针,还可以得到原先的指针值)。
该运算符的用法比较多。 四、const_cast 运算符
用法:const_cast<type_id> (expression)
该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。常量指针被转化成非常量指针,并且仍然指向原来的对象;常量引用被转换成非常量引用,并且仍然指向原来的对象;常量对象被转换成非常量对象。

代码

#include "stdafx.h"
#include "B.h"
#include "X.h" int _tmain(int argc, _TCHAR* argv[])
{
CA a;
CB b;//b继承于a类
CX x; a=b;
//b=a;
//a=reinterpret_cast<CA>(x);
//a=(CA)x;
CA *pa;
CB *pb;
CX *px;
pa=static_cast<CA*>(&b);
//pa=&b; 不提倡
pa=dynamic_cast<CA*>(&b); //pb=static_cast<CB*>(&x);//不安全 能检测到错误,要转换2个类型,不存在继承关系
pb=reinterpret_cast<CB*>(&x);//C++强制转换方式
pb=(CB*)&x;//C语言 强制转换方式
printf("&a=%x\n",&a);
printf("pb=%x\n",pb);
pb=dynamic_cast<CB*>(&a);//不安全 ,一般检测返回指针值是否为NULL
printf("pb=%x\n",pb);
getchar(); return ;
}

mfc 类型间的强制转换的更多相关文章

  1. 【转】C语言中不同的结构体类型的指针间的强制转换详解

    C语言中不同类型的结构体的指针间可以强制转换,很自由,也很危险.只要理解了其内部机制,你会发现C是非常灵活的. 一. 结构体声明如何内存的分布, 结构体指针声明结构体的首地址, 结构体成员声明该成员在 ...

  2. 深入js系列-类型(隐式强制转换)

    隐式强制转换 在其可控的情况下,减少冗余,让代码更简洁,很多地方都进行了隐式转换,比如常见的三目表达式.if().for().while.逻辑运算符 || &&,适当通过语言机制,抽象 ...

  3. 深入js系列-类型(显式强制转换)

    什么是显式 这里的显式和隐式是以普遍的标准来进行讨论的,你能看出来是怎么回事,那么它对你是"显式",相反你不知道的话,对你就是"隐式" 抽象操作 字符串.数字. ...

  4. c++无关类型指针的强制转换原理的分析和尝试

    因最近看到大量的c类型指针强制转换,联系到c++的reinterpret_cast强制转换符,故总结一下. 先上图 由图中可以看出,先声明了一个结构体t与一个含有三个元素的数组num,接着声明一个指向 ...

  5. C++中类型强制转换

    C++中强制类型转换有四种: 1.static_cast 格式:static_cast<Type>(Value); --用于基本类型间的转换,但不能用于基本类型指针间的转换: int i ...

  6. python 查看帮助和变量的强制转换

    查看帮助 dir() 函数 查看对象都有哪些属性和方法 用法:把要查询的对象写入()括号中即可 print(dir([])) (查看列表的方法) 执行: C:\Python27\python.exe ...

  7. C语言:数据类型转换 自动转换 强制转换

    数据类型转换就是将数据(变量.数值.表达式的结果等)从一种类型转换为另一种类型. 自动类型转换 自动类型转换就是编译器默默地.隐式地.偷偷地进行的数据类型转换,这种转换不需要程序员干预,会自动发生.1 ...

  8. C++指针类型间强制转换

    深入理解指针类型间的转换 C++中指针的强制转换 强制类型转换(int).(int&)和(int*)的区别 内存中的地址 地址的本质就是一串0和1的机器代码,内存中的地址没有明确数据类型,但地 ...

  9. Java基础之8个基本类型及基本类型间转换

    8种基本数据类型 Java语言有8种基本数据类型, 分别用于存储整数.浮点数.字符数据和布尔类型数据.需要注意的是: 现在所介绍的仅仅是基本数据类型,后续还会介绍很多非基本数据类型.基本数据类型如图 ...

随机推荐

  1. 重学C语言---03数据和C

    1.数据的必要性.数据使我们生活中不可缺少的东西,程序也是如次,离不开数据.将文字.图片和单词等输入到算计,将其展现出来或者做一系列操作等. 2.实例程序. /*rhodium.c--用金属铑衡量体重 ...

  2. sqlio

    http://www.cnblogs.com/Amaranthus/archive/2011/09/16/2178747.html Each line in the param.txt file lo ...

  3. redis之安装与简单使用

    python操作redis: https://www.cnblogs.com/melonjiang/p/5342505.html https://www.jianshu.com/p/2639549be ...

  4. systemd-analyze – 在Linux中查找系统启动性能统计信息

    您是否在使用 systemd 系统和服务管理器,并且您的 Linux 系统需要较长时间才能启动,或者您希望查看系统启动性能的报告? 如果是的话,你已经登陆了正确的地方. 在本文中,我们将向您展示如何使 ...

  5. [IDEA_2] IDEA 问题合集

    1. IDEA 通过 Maven 导入的依赖包下面存在红色波浪线 问题描述: 创建的 Maven Project 在添加相关依赖后自动下载,自动添加的依赖包的下面存在红色波浪线,在使用过程中存在问题, ...

  6. Linux yum源详解

    软件包安装方式 0.默认从官网下载包(国内,雅虎,网易,阿里云)        cat /etc/yum.repos.d/rhel-source.repo  [yum文件目录--redhat6版] [ ...

  7. 五大问题,详解阿里云PTS铂金版

    阿里云PTS铂金版,具备强大的分布式压测能力,相比业界产品的云主机发起,该产品更快速,来源更广泛,脉冲能力和流量掌控能力更强.日前,阿里云推出了PTS铂金版尝鲜包,旨在为用户提供高性价比的最佳实践.我 ...

  8. vcenter server appliance(vcsa) 配置IP的方法

    方法一: vcenter server appliance 5.1 及以后版本包括5.5,在安装完毕后,console界面是没有网络配置项的,如果需要进行IP配置,可以login后,输入命令yast( ...

  9. 读高性能JavaScript编程 第四章 Conditionals

    if else 和 switch    &&    递归 if else 和 switch 一般来说,if-else 适用于判断两个离散的值或者判断几个不同的值域.如果判断多于两个离散 ...

  10. 3、爬虫之selenium模块

    一 selenium模块 什么是selenium?selenium是Python的一个第三方库,对外提供的接口可以操作浏览器,然后让浏览器完成自动化的操作. selenium最初是一个自动化测试工具, ...