[TOC]

# 静态转换

用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换

* 进行上行转换(把派生类的指针或引用转换成基类表示)是安全的.

* 进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的

* 用于基本数据类型之间的转换,如把int转换成char,把char转换成int.这种转换的安全性也要开发人员来保证

## 基础类型转换

~~~

char a = 'a';

//char->double

//static_cast(将转换谁)

double b = static_cast(a);

cout << typeid(b).name() << endl;

~~~

## 有层次关系类的指针或引用转换

~~~

Father *f = NULL;

Son *s = NULL;

//向下转型,不安全

Son *s1 = static_cast(f);

//向上转型,安全

Father *f1 = static_cast(s);

~~~

## 引用转换

~~~

Father f;

Son s;

Father &ref_f = f;

Son &ref_s = s;

//向上转换,安全

static_cast(ref_s);

//向下转换,不安全

static_cast(ref_f);

~~~

# 动态转换

* `dynamic_cast`主要用于类层次间的上行转换和下行转换

* 在类层次间进行上行转换时,`dynamic_cast`和`static_cast`的效果是一样的

* 在进行下行转换时,`dynamic_cast`具有类型检查的功能,比`static_cast`更安全

**基础类型不能使用动态转换**

~~~

Father *f = NULL;

Son *s = NULL;

//向上转换,安全

Father *f1 = dynamic_cast(s);

//向下转换,不安全,会检查,如果不是多态会报error

//Son *s1 = dynamic_cast(f);

Father *f2 = new Son();

Son *s2 = dynamic_cast(f2);

~~~

# 常量转换

该运算符用来修改类型的const属性

* 常量指针被转化成非常量指针,并且仍然指向原来的对象;

* 常量引用被转换成非常量引用,并且仍然指向原来的对象;

**注意:不能直接对非指针和非引用的变量使用const_cast操作符去直接移除它的const.**

~~~

const int *p = NULL;

// const->不带const

int *newP = const_cast(p);

int *pp = NULL;

const int* newPP = const_cast(pp);

~~~

# 重新解释转换

这是最不安全的一种转换机制,最有可能出问题。

主要用于将一种数据类型从一种类型转换为另一种类型。

它可以将一个指针转换成一个整数,也可以将一个整数转换成一个指针.

~~~

int a = 10;

int *p = reinterpret_cast(a);

Father *f = NULL;

Other *o = reinterpret_cast(f);

~~~

为什么类的下行转换是不安全的_类型转换相关推荐

  1. 类型转换,类与类之间的转换,继承关系,继承与静态变量,子类父类重名,多继承,虚基类

     常量的基本类型转换,例如:int num(10.8),这种方式是隐式转换. 通过函数的构造函数实现转换. 类类转换函数,当构造函数不能将类型转换成基本类型时.所以就有了类类转换函数,通过这种方式 ...

  2. Vue.JS项目输入框中使用v-model导致number类型值自动转换成string问题的解决方案

    老文章了,目前用el-input v-model.number就能解决 很简单的操作,不知道当初在做什么,下文请直接忽略- Vue.JS项目中v-model导致输入框中number类型值自动转换成st ...

  3. java 类之间转换,java中类对象之间的类型转换

    类似于基本数据类型之间的强制类型转换. 存在继承关系的父类对象和子类对象之间也可以 在一定条件之下相互转换. 这种转换需要遵守以下原则: 1.子类对象可以被视为是其父类的一个对象 2.父类对象不能被当 ...

  4. php中自动转换、强制转换、其他数据类型和bool转换

    0x01 自动转换 运算过程需要的数据类型和提供的数据类型不一致,将数据类型转为自己需要的类型 <?phpheader('content-type:text/html;charset=utf-8 ...

  5. 类的自动转换和强制类型转换

    类型转换 将一个标准类型变量的值赋值给另一种标准类型的变量时,如果这两种类型兼容,则C++自动将这个值转换为接收变量的类型. long count = 8; //int类型转换为long类型 doub ...

  6. android开发图片格式,Android程序开发如何处理图像格式类及图像转换

    在Android程序开发过程中,明确哪些图像格式类(ImageFormat.PixelFormat及BitmapConfig等)及图像(JPG.PNG及BMP等)的转换方式非常重要,在以后的程序开发过 ...

  7. Object 类的强制转换

    文章目录 1.Object 类的强制转换 1.1Object 类型可以转换为什么类型? 1.2 Object [] 数组类存储对象 1.Object 类的强制转换 1.1Object 类型可以转换为什 ...

  8. C++ 学习笔记之---类的自动转换

    参考自<C++ Primer Plus 6th Edition> 类的自动转换: 说明:    C++允许程序员指定类之间进行转换的方式(含基本类型) 站在类的角度看问题,姑且分为&quo ...

  9. 【C#】类——里式转换

    类是由面对对象程序设计中产生的,在面向结构的程序设计例如C语言中是没有类这个概念的!C语言中有传值调用和传址调用的两种方式!在c语言中,主方法调用方法,通过传递参数等完成一些操作,其中比较常用的的数据 ...

最新文章

  1. 步进电机红外遥控C语言程序,单片机红外遥控+步进电机+1602液晶显示c语言源程序...
  2. 《SAS编程与数据挖掘商业案例》学习笔记之八
  3. ab 模拟_Ab测试第二部分的直观模拟
  4. dede后台栏目管理文章统计数量和实际文章数不一致解决办法
  5. 顶级技术大咖,揭秘实时音视频开发的超级风口
  6. JS的基本语法知识概括(ECMA、DOM、BOM)
  7. 将来时态:I will fly - I'm going to fly - I'm flying_48
  8. 陈式心意混元太极拳功要
  9. leetcode力扣62. 不同路径
  10. uva 540 (Team Queue UVA - 540)
  11. 创建ubuntu根文件系统
  12. Linux 下把服务设置自启动
  13. Linux系统Ubuntu vim安装plugin
  14. 关于Vmware中的Ubuntu不断弹窗Num Lock的问题
  15. xp信息服务器iis5.0,XP中安装iis5.0/IIS6.0的详细操作方法步骤(图文教程)
  16. 数据结构算法实现及例题
  17. 阿里云公共DNS安全传输服务介绍(DoH/DoT)
  18. DVB信道编解码与调制解调
  19. 旋转矩阵(一):旋转矩阵能让什么东西旋转?
  20. Django配置163邮箱出现 authentication failed(535)错误解决方法

热门文章

  1. C语言经典例75-反转整数
  2. 【ijkplayer】编译 Android 版本的 ijkplayer ⑤ ( 执行 init-android-libyuv.sh | 执行 init-android-soundtouch.sh )
  3. 【错误记录】NDK 配置错误 ( C/C++ debug|arm64-v8a : Could not get version from cmake.dir path )
  4. 【组合数学】生成函数 ( 性质总结 | 重要的生成函数 ) ★
  5. Android Studio开发配置NDK环境
  6. FIFO buffer 和普通buffer区别
  7. GIL(全局解释器锁)与互斥锁
  8. java stringBuilder的用法
  9. CRM WEB UI 04明细界面添加按钮
  10. 在Linux命令行下运行Matlab