1、类型转换

  static_cast<>():静态类型转换,编译时C++编译器会做类型检查,在C语言中,隐式类型转换的地方,均可以使用static_cast<>()进行类型转换;

  reinterpret_cast<>():强制类型转换;编译器重新解释;

  dynamic_cast<Cat *>(base):父类对象===>子类对象,向下转型,一般用在继承中;

  const_cast<>():const char *---> char *,把常量属性去掉;

(1)、代码如下:

#include<iostream>
using namespace std;class Animal{public:virtual void cry() = 0;
};class Dog : public Animal{public:virtual void cry(){cout<<"汪王"<<endl;}   void doHome(){cout<<"看家"<<endl;}   private:};class Cat : public Animal{public:virtual void cry(){cout<<"喵喵"<<endl;}   void doThing(){cout<<"抓老鼠"<<endl;}private:
};void playObj(Animal *base){base->cry();   //1、有继承 2、有虚函数的重写 3、有父类指针指向子类对象; ===>发生多态//dynamic_cast能识别子类对象,运行时类型识别;Dog *pDog = dynamic_cast<Dog *>(base);  //是自己类型的,将转换成功,否则返回为NULL;if(pDog){pDog->doHome();   //让狗做自己特有的工作;}Cat *pCat = dynamic_cast<Cat *>(base);//父类对象===>子类对象,向下转型;if(pCat){pCat->doThing();   //让猫做自己特有的工作;}
}int main(void){Dog d1;Cat c1;playObj(&d1);playObj(&c1);//Animal *base = NULL;     //base = static_cast<Animal *>(&d1);return 0;
}
/*
int main(void){double pi = 3.14;int num2 = static_cast<int>(pi); //静态类型转换,编译时C++编译器会做类型检查,在C语言中,隐式类型转换
的地方,均可以使用static_cast<>()进行类型转换;char *p1 = "abcdef";int *p2 = NULL;//p2 = static_cast<int*>(p1); //使用static_cast,编译器编译时,会做类型检查,若有错误,提示错误;p2 = reinterpret_cast<int *>(p1);// 强制类型转换;编译器重新解释cout<<p1<<endl;cout<<p2<<endl; //%dreturn 0;
}*/

运行结果:

(2)、针对const_cast<char *>(p)的类型转换代码:

#include<iostream>
using namespace std;void printBuf(const char *p){//p[1] = '1';char *p1 = NULL;p1 = const_cast<char *>(p);//const char *---> char *,把常量属性去掉;p1[0] = 'Z';cout<<p<<endl;
}int main(void){const char buf[] = "abcdefg";//程序员要确保p所指向的空间确实能修改,如果不能修改将会带来灾难性的后果;//const char *buf = "abcdef";//会发生断错误;因为其所指向的空间本身不可修改printBuf(buf);return 0;
}

运行结果:

转载于:https://blog.51cto.com/wait0804/1876440

C++中四种类型装换相关推荐

  1. 学习笔记 | c++中四种类型cast(强制)转换

    c++中四种cast转换 C++四种强制转换方式,应用场景,细节 1.const_cast 用于将const变量转为非const. 用来修饰类型的const或volatile属性.除了去掉const或 ...

  2. LayoutInflater中四种类型inflate方法的介绍

    第一种: public View inflate (int resource, ViewGroup root) resource : View 的 layout 的 ID root :如果返回 nul ...

  3. C#中方法参数的四种类型

    C#中方法的参数有四种类型: -值参数:不含任何修饰符.方法中的形参是实参的一份拷贝,形参的改变不会影响到内存中实参的的值,实参是安全的. -引用参数:以ref修饰符声明.传递的参数实际上是实参的指针 ...

  4. C#中方法的参数的四种类型(转)

    转自:http://www.cnblogs.com/netlyf/p/3822956.html C#中方法的参数有四种类型: 1. 值参数类型  (不加任何修饰符,是默认的类型) 2. 引用型参数   ...

  5. 【整理】Python中的re.search和re.findall之间的区别和联系 + re.finall中带命名的组,不带命名的组,非捕获的组,没有分组四种类型之间的区别

    之前自己曾被搞晕过很多次. 后来使用这些函数次数多了之后,终于比较清楚的弄懂了两者之间的区别和关系了. 尤其是一些细节方面的注意事项了. 在看下面的总结和代码之前,请先确保你对如下基本概念已经有所了解 ...

  6. java基础unit02-变量,基本数据类型。类型装换,Scanner用法

    回顾: 1.Linux 2.java运行环境 .java,编译.class,JVM加载.class并运行.class WindowsJVM-windows LinuxJVM-----Linux IOS ...

  7. 地铁闸门会夹伤人吗_西安地铁率先推出分类垃圾箱 四种类型你会放吗?

    垃圾分类就是新时尚[西安地铁率先推出分类垃圾箱 四种类型你会放吗?]近日,不少上海人已被垃圾分类"逼疯",各类段子刷爆网络."你是什么垃圾?"直击灵魂深处的拷问 ...

  8. 四种类型的数据分析模式

    在这篇博文中,我们聚焦于在数据科学领域所遇到的四种类型的数据分析模式:描述型.诊断型.预测型和指导型. 当我与刚涉足数据科学领域的年轻分析师们交谈时,通常,我会问他们认为什么是数据科学家最重要的能力. ...

  9. SpringMVC-方法四种类型返回值总结,你用过几种?

    SpringMVC 现在算是 Java 领域的一个基础性框架了,很多人天天用,可是对于 SpringMVC 方法的返回值,你又是否完全清楚呢?今天松哥就来和大家聊一聊 SpringMVC 中四种不同类 ...

最新文章

  1. jsp获取java后台数据_springMVC笔记:jsp页面获取后台数据记录列表
  2. 二叉树:HDU1754
  3. 从一个小场景学会使用 apply方法
  4. CKEditor4.7怎样实现上传图片,浏览服务器(无需ckfinder),nodejs图片管理,字体居中,图片居中(超详细)...
  5. 统计挖掘那些事(八)—— 分层抽样与交叉验证
  6. 摩斯电码php源码,PHP实现基于文本的莫斯电码生成器
  7. Kali Linux信息收集工具全集
  8. 鹰式价差matlab,蝶式及鹰式价差组合策略
  9. Array Shrinking
  10. 做了快6年研发的女程序员,转行做什么合适呢?
  11. Unity Shader - GrabPass 实现武器热扭曲拖尾效果
  12. Centos7初始化网络配置
  13. win 7 防火墙设置
  14. Linux常用命令有哪些
  15. Android9.0 完全隐藏导航栏、状态栏
  16. php使用addons,think addons教程
  17. 各种时间概念的详细解释 恒星时世界时 协调世界时
  18. 概率论在实际生活的例子_概率统计在实际生活中的应用
  19. 数据结构和算法-排序算法(java实现)
  20. react 前端分页查询数据导出excel

热门文章

  1. android程序安装后图标不显示
  2. webstorm常用设置
  3. 使用sed和awk取除最后两个字段之外的字段
  4. Juniper SRX 常用命令
  5. 网站实现个人支付宝即时到帐POST页面
  6. Dot Net设计模式—外观模式
  7. 2018-2019-2 20165315《网络攻防技术》Exp6 信息搜集与漏洞扫描
  8. 2019 年,容器技术生态会发生些什么?
  9. 阿里云联合8家芯片商推“全平台通信模组”,加速物联网生态建设...
  10. TDD 与 BDD 仅仅是语言描述上的区别么?