c++ 自动应用类型转换
c++中,在赋值时如果类型不匹配,就会应用到:类型转换。类型转换又分为隐式转换(implicit conversion) 和 显式强制类型转换(emplcit conversion)。在这我围绕着类的情况展开来说。
- 类中的类型转换,离不开转换函数。
创建转换函数的格式:operator typeName();typeName指出了要转换的类型,一般是基本整型,如int, double...
注意一下几点:1,转换函数必须是类方法,即要在类中声明; 2,转换函数不能指定返回类型; 3,转换类型不能有参数。 - 假设存在一个类:vector ,类中有两个转换函数,一个是double , 一个是int 的。我声明定义一个对象:vector pop(4.66)(注意:我省略了构造函数的说明,且这是隐式调用构造函数)。
double ptest = pop;
cout << "pop = " << ptest << endl;
上面第一句会将类对象pop隐式转换为double类型然后赋值给ptest 。如果没有double ptest = pop 这一句,而是直接 cout << "pop = " << ptest << endl,就会出现编译错误,原因是:在cout示例中,并没有指定隐转换为int还是double,所以编译器不知道要转换哪个,也就是出现了二义性转换。但如果在类中只定义了一个转换函数,则编译器会接受该语句,这是因为只有一个转换可能,因此不会存在二义性。
- 赋值的情况类似。对于当前的类声明(即定义了两个转换函数的类)来说,编译器会认为下面的语句二义性而拒绝它:
long gone = pop
在c++中,int 和 double都可以被赋给long变量,所以对于目前的类来说,编译器使用int转换函数或者double转换函数都是合法的。编译器不想承担选择转换函数的责任。和上面一样,删去任何一个着两个转换函数之一,编译器都将会接受long gone = pop 这句语句。 - 当类定义两种或多种转换函数时,仍可以用显式强制类型转换来指出要使用哪个转换函数。可以使用下面任何一种强制类型转换表示法:
long gone = (double)pop
long gone = double (pop)
这两句功能一样,都是将pop先转换为一个double值,然后赋值操作再将double值转换为long类型。
c++ 自动应用类型转换的更多相关文章
- c语言的自动类型转换
转自c语言的自动类型转换 自动转换遵循以下规则: 1) 若参与运算量的类型不同,则先转换成同一类型,然后进行运算. 2) 转换按数据长度增加的方向进行,以保证精度不降低.如 ...
- C语言自动类型转换
自动转换遵循以下规则: 1) 若参与运算量的类型不同,则先转换成同一类型,然后进行运算. 2) 转换按数据长度增加的方向进行,以保证精度不降低.(eg:int型和long型运算时,先把int量转成lo ...
- Java数据类型转换(自动转换和强制转换)
数据类型的转换,分为自动转换和强制转换.自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换;强制类型转换则必须在代码中声明,转换顺序不受限制. 自 ...
- c语言的自动类型转换(转)
一.自动转换遵循以下规则: 若参与运算量的类型不同,则先转换成同一类型,然后进行运算. 转换按数据长度增加的方向进行,以保证精度不降低.如int型和long型运算时,先把int量转成long型后再进行 ...
- BeanUtils中的自动类型转换(二)
javabean package entity; import java.util.Date; /** * 一个测试用: * student,javaBean * @author mzy * 一个标准 ...
- C++类型转换函数
1.什么是类型转换函数 类型转换函数的作用是将一个类的对象转换成另一类型的数据. class testclass { private: int r; int m; public : testclass ...
- JavaScript中的数据类型转换
本文中提到的“原始值”指的是undefined,null,Boolean,string和number. 本文中的对象是native对象,宿主对象(浏览器定义的对象)按照各自的算法转换. JavaScr ...
- java语言中数值自动转换的优先顺序
转换原则:从低精度向高精度转换byte .short.int.long.float.double.char数据类型的转换,分为自动转换和强制转换.自动转换是程序在执行过程中“悄然”进行的转换,不需要用 ...
- Java 类型转换以及Object转成其他类型
Object转int int count=(int)map.get("count") int count=Integer.parseInt((String)map.get(&quo ...
随机推荐
- 数字图像处理(MATLAB版)学习笔记(1)——第1章 绪言
0.下定决心 当当入手数字图像处理一本,从此开此正式跨入数字图像处理大门.以前虽然多多少少接触过这些东西,也做过一些相关的事情,但感觉都不够系统,也不够专业,从今天开始,一步一步地学习下去,相信会有成 ...
- C# 超高速高性能写日志 代码开源
1.需求 需求很简单,就是在C#开发中高速写日志.比如在高并发,高流量的地方需要写日志.我们知道程序在操作磁盘时是比较耗时的,所以我们把日志写到磁盘上会有一定的时间耗在上面,这些并不是我们想看到的. ...
- Linux-进程描述(3)之进程状态僵尸进程与孤儿进程
进程状态 进程状态反映进程执行过程的变化.这些状态随着进程的执行和外界条件的变化而转换.为了弄明正正在运行的进程是什么意思,我们需要知道进程的不同状态.一个进程可以有多个状态(在Linux内核中,进程 ...
- FarPoint.Win.Spread 自定义表头
最近C/S项目中用到FarPoint.Win.Spread,想在表头加个全选的checkbox,实现效果如图: 列的设置大家都清楚,直接可视化视图中设置该列CellType为CheckBox类型即 ...
- aProxy: 带认证授权和权限控制的反向代理
前段时间很多数据库因为没有做好权限控制暴露在外网被删然后遭勒索的事件,而类似的有些内网的web服务也会被开放到公网并且没有做任何权限控制的,这样也会有一定的风险.所以就决定写篇文章简单介绍一个小工具. ...
- javaweb项目-医者天下 (Spring+SpringMVC+MyBatis)
项目下载地址:http://download.csdn.net/detail/qq_33599520/9826683 项目完整结构图: 项目简介: 医者天下项目是一个基于Spring+SpringMV ...
- 【渗透测试】hydra使用小结
-R:继续从上一次进度接着破解 -S:大写,采用SSL链接 -s <PORT>:小写,可通过这个参数指定非默认端口 -l <LOGIN>:指定破解的用户,对特定用户破解 -L ...
- Azure IoT 技术研究系列5-Azure IoT Hub与Event Hub比较
上篇博文中,我们介绍了Azure IoT Hub的使用配额和缩放级别: Azure IoT 技术研究系列4-Azure IoT Hub的配额及缩放级别 本文中,我们比较一下Azure IoT Hub和 ...
- 【算法系列学习】HDU 5527 Too Rich贪心
http://www.cnblogs.com/AOQNRMGYXLMV/p/4934747.html #include<iostream> #include<cstdio> # ...
- Linux之定时任务
定时任务Crond介绍 Crond是linux系统中用来定期执行命令/脚本或指定程序任务的一种服务或软件,一般情况下,我们安装完Centos5/6 linux操作系统之后,默认便会启动Crond任务调 ...