C++中四种类型装换
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++中四种类型装换相关推荐
- 学习笔记 | c++中四种类型cast(强制)转换
c++中四种cast转换 C++四种强制转换方式,应用场景,细节 1.const_cast 用于将const变量转为非const. 用来修饰类型的const或volatile属性.除了去掉const或 ...
- LayoutInflater中四种类型inflate方法的介绍
第一种: public View inflate (int resource, ViewGroup root) resource : View 的 layout 的 ID root :如果返回 nul ...
- C#中方法参数的四种类型
C#中方法的参数有四种类型: -值参数:不含任何修饰符.方法中的形参是实参的一份拷贝,形参的改变不会影响到内存中实参的的值,实参是安全的. -引用参数:以ref修饰符声明.传递的参数实际上是实参的指针 ...
- C#中方法的参数的四种类型(转)
转自:http://www.cnblogs.com/netlyf/p/3822956.html C#中方法的参数有四种类型: 1. 值参数类型 (不加任何修饰符,是默认的类型) 2. 引用型参数 ...
- 【整理】Python中的re.search和re.findall之间的区别和联系 + re.finall中带命名的组,不带命名的组,非捕获的组,没有分组四种类型之间的区别
之前自己曾被搞晕过很多次. 后来使用这些函数次数多了之后,终于比较清楚的弄懂了两者之间的区别和关系了. 尤其是一些细节方面的注意事项了. 在看下面的总结和代码之前,请先确保你对如下基本概念已经有所了解 ...
- java基础unit02-变量,基本数据类型。类型装换,Scanner用法
回顾: 1.Linux 2.java运行环境 .java,编译.class,JVM加载.class并运行.class WindowsJVM-windows LinuxJVM-----Linux IOS ...
- 地铁闸门会夹伤人吗_西安地铁率先推出分类垃圾箱 四种类型你会放吗?
垃圾分类就是新时尚[西安地铁率先推出分类垃圾箱 四种类型你会放吗?]近日,不少上海人已被垃圾分类"逼疯",各类段子刷爆网络."你是什么垃圾?"直击灵魂深处的拷问 ...
- 四种类型的数据分析模式
在这篇博文中,我们聚焦于在数据科学领域所遇到的四种类型的数据分析模式:描述型.诊断型.预测型和指导型. 当我与刚涉足数据科学领域的年轻分析师们交谈时,通常,我会问他们认为什么是数据科学家最重要的能力. ...
- SpringMVC-方法四种类型返回值总结,你用过几种?
SpringMVC 现在算是 Java 领域的一个基础性框架了,很多人天天用,可是对于 SpringMVC 方法的返回值,你又是否完全清楚呢?今天松哥就来和大家聊一聊 SpringMVC 中四种不同类 ...
最新文章
- jsp获取java后台数据_springMVC笔记:jsp页面获取后台数据记录列表
- 二叉树:HDU1754
- 从一个小场景学会使用 apply方法
- CKEditor4.7怎样实现上传图片,浏览服务器(无需ckfinder),nodejs图片管理,字体居中,图片居中(超详细)...
- 统计挖掘那些事(八)—— 分层抽样与交叉验证
- 摩斯电码php源码,PHP实现基于文本的莫斯电码生成器
- Kali Linux信息收集工具全集
- 鹰式价差matlab,蝶式及鹰式价差组合策略
- Array Shrinking
- 做了快6年研发的女程序员,转行做什么合适呢?
- Unity Shader - GrabPass 实现武器热扭曲拖尾效果
- Centos7初始化网络配置
- win 7 防火墙设置
- Linux常用命令有哪些
- Android9.0 完全隐藏导航栏、状态栏
- php使用addons,think addons教程
- 各种时间概念的详细解释 恒星时世界时 协调世界时
- 概率论在实际生活的例子_概率统计在实际生活中的应用
- 数据结构和算法-排序算法(java实现)
- react 前端分页查询数据导出excel