类型强制转换

在编程的时候我们经常遇到类型的强制转换,C++为此提供了更安全的转换方式,在编程中我们更多的应该采用C++提供的类型转换方式

基本类型转换

基本类型转换用的最多,一般将高精度转换为低精度,static_cast关键字用于基本类型转换。

float a = 1.5;
int b = static_cast<int>(a);

上面的列子将浮点型转为整型

常量类型转换

常量类型转换一般将指向变量的指针强制让其指向一个常量

const int  a = 1;
const int* p1 = &a;
int* p2 = const_cast<int*>(&a);

&a的返回值是const int * ,通过**const_cast强制转换为int*类型

普通类型指针转换

使用reinterpret_cast可以将可以实现指向普通类型的指针的类型转换

int a = 0xA0B0C0D0;
char* c = reinterpret_cast<char*>(&a);
for (int i=0; i<4; i++) {
printf("%x\n", *(c+i));
}

上的示例中强制让一个char*指针指向了int型的变量,并对变量中的内容进行了访问。

对象指针类型转换

dynamic_csast运算符用于对象的向上转型或向下转型, 其主要用途是确保可以安全地调用虚函数。dynamic_cast的尖括号中必须为指针或者引用。如果是向下转型,其参数中的指针必须要有虚函数,如果转换失败则为NULL

#include <iostream>
#include <string>
using namespace std; class Person {
public:
Person(){};
virtual ~Person(){cout << "Person" << endl;}
}; class Worker: public Person {
public:
Worker(){};
~Worker(){cout << "Worker" << endl;}
}; int main(void) {
Person* person = dynamic_cast<Person*> (new Worker());
Worker* worker = dynamic_cast<Worker*>(person); //传入的person指针对应的类必须要有虚函数
}

参考

http://www.cnblogs.com/blueoverflow/p/4712369.html

最新文章

  1. android ADT 无法查看第三方jar源代码
  2. Sql Server系列:Update语句
  3. roleManager与角色管理授权
  4. java动手动脑和课后实验型问题String类型
  5. ASP.NET简单实现APP中用户个人头像上传和裁剪
  6. Java数据结构——双端链表
  7. 解决SQLSERVER在还原数据时出现的“FILESTREAM功能被禁用”问题
  8. PHP开发第一个扩展
  9. TCL语言笔记:TCL中的String命令
  10. MYSQL 5.7 新增150多个新功能
  11. PowerDesigner 如何生成数据库更新脚本
  12. linux crond服务
  13. 生活中的大数据 hadoop
  14. 【Unity 3D】教程(1)建立场景
  15. Java经典编程题50道之三十九
  16. ONCOCNV软件思路分析之tumor处理
  17. 使用python对py文件程序代码复用度检查
  18. 计算机网络之JSONP跨域
  19. Jenkins时区设置为北京时间
  20. 从零开始搭建VUE项目

热门文章

  1. 响应式布局中为什么要使用em设置字体大小而不用px
  2. 编程之美 set 14 小飞的电梯调度算法
  3. visual studio 常识
  4. Packet for query is too large (1166 &gt; 1024). You can change this value
  5. cocos2dx-draw绘制
  6. ora-04021 无法锁表的解决办法
  7. (转)聊聊Servlet、Struts1、Struts2以及SpringMvc中的线程安全
  8. 前端构建工具gulpjs的使用介绍及技巧(一)
  9. Django中间件如何处理请求
  10. C# 编写 TensorFlow 人工智能应用