博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++类型转换
阅读量:4645 次
发布时间:2019-06-09

本文共 2219 字,大约阅读时间需要 7 分钟。

C与C++类型转换

C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:

  TYPE b = (TYPE)a               

  

C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用:

  • static_cast 静态类型转换。如int转换成char
  • reinterpreter_cast 重新解释类型
  • dynamic_cast 命名上理解是动态类型转换。如子类和父类之间的多态类型转换。用于类型识别
  • const_cast, 字面上理解就是去const属性
1 #include 
2 using namespace std; 3 4 void printBuf(const char * p) 5 { 6 //p[0] = 'z'; 7 char *p1 = NULL; 8 9 //获得的是地址10 p1 = const_cast
(p); //风格411 p1[0] = 'Z'; //通过p1修改内存空间12 cout << p << endl;13 }14 15 class Tree {16 17 };18 19 class Animal20 {21 public:22 virtual void cry() = 0;23 24 };25 class Dog : public Animal26 {27 public:28 virtual void cry()29 {30 cout << "汪汪汪" << endl;31 }32 void doHome()33 {34 cout << "看家" << endl;35 }36 };37 38 class Cat : public Animal39 {40 public:41 virtual void cry()42 {43 cout << "喵喵喵" << endl;44 }45 void sajiao()46 {47 cout << "撒娇" << endl;48 }49 };50 51 void playObj(Animal * base)52 {53 base->cry(); //1有继承 2虚函数重写 3父类指针 指向子对象 ==》多态54 //能识别子类对象55 //风格3:dynamic_cast 运行时类型识别 RITT56 Dog *pDog = dynamic_cast
(base); //父类对象转换为子类对象57 if (pDog != NULL) //向下转型58 {59 pDog->doHome();60 }61 Cat *pCat = dynamic_cast
(base);62 if (pCat != NULL)63 {64 pCat->sajiao();65 }66 }67 68 int main()69 {70 double dpi = 3.1415269;71 int ipi = (int)dpi; // c语言强制类型转换72 cout << ipi << endl; 73 74 //c++风格类型转换75 int ipi2 = static_cast
(dpi); // 风格1:static_cast类型转换76 cout << ipi2 << endl;77 78 Dog d1;79 Cat c1;80 81 char * p1 = "12345";82 int *p2 = NULL;83 //p2 = static_cast
(p1); //不可以使用静态转换84 p2 = reinterpret_cast
(p1);//风格2:使用重新解释类型转换85 cout << p2 << endl; //输出p1的内存地址86 Animal * pBase = NULL;87 pBase = &d1; //父类指针指向子类地址88 pBase = static_cast
(&d1); //让C++编译在编译的时候进行 类型检查 //强制类型转换89 pBase = reinterpret_cast
(&d1); //reinterpret_cast 强制类型转换90 91 }

 

 

转载于:https://www.cnblogs.com/zmm1996/p/10533687.html

你可能感兴趣的文章
01javascript数据类型
查看>>
asp.net实现md5加密方法详解
查看>>
AJAX
查看>>
table 的thead th 固定 tbody滚动例子
查看>>
并行计算思考----回溯法求解数独问题
查看>>
设计模式:模板模式
查看>>
和菜鸟一起学OK6410之ADC模块
查看>>
代理 模式
查看>>
[git] 细说commit (git add/commit/diff/rm/reset 以及 index 的概念)
查看>>
DOM Core和HTML DOM的区别
查看>>
SurfaceView+MediaPlay的bug们
查看>>
网络表示学习总结
查看>>
完成评论功能
查看>>
far和near
查看>>
Python爬虫实战四之抓取淘宝MM照片
查看>>
2015 Multi-University Training Contest 1
查看>>
C#判断一个字符串是否是数字或者含有某个数字
查看>>
SVN使用指南
查看>>
【转载】掌 握 3 C ‧ 迎 接 亮 丽 职 涯
查看>>
爬取网站附件
查看>>