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 ...
随机推荐
- 获取VB类模块成员函数指针(转)
最近在做一些VB6.VBA的项目,被如何获取类模块中的函数指针这个问题所困扰,收集整理后,有2分资料值得收藏,特将关键部分留存,以备后续查找. 参照连接1:http://www.cnblogs.com ...
- Android Studio 安装后首次启动的 Config path ...... is invalid 问题(转)
原文链接:http://m.blog.csdn.net/blog/hnust_xiehonghao/46127775 1. 问题描述: 安装好Android Studio后,启动时弹出如下信息: Co ...
- 为Jquery EasyUI 组件加上“清除”功能
1.背景 在使用 EasyUI 各表单组件时,尤其是使用 ComboBox(下拉列表框).DateBox(日期输入框).DateTimeBox(日期时间输入框)这三个组件时,经常有这样的需求,下拉框或 ...
- JavaScript引用是如何工作的
原文链接:https://www.sitepoint.com/how-javascript-references-work/ 摘要:JavaScript中没有指针,并且JavaScript中的引用与我 ...
- C语言中关于三目运算符的注意事项
C语言中常见的条件运算符?:在运算符优先级中排行13.部分时候可以代替if--else语句,使代码更加简洁.但是更容易隐含一些不易觉察的错误. 最近接了一个项目,本来通信协议部分很简单,自己的STM3 ...
- 使用NPOI写入Excel数据(ASP.NET)
第一次做这个写入数据的功能,研究了下npoi的类 IWorkbook wb = new HSSFWorkbook(); //创建表 ISheet sh = wb.CreateSheet("X ...
- PHP 魔术方法__set() __get() 方法
a); //output: 123 var_dump($s->b); //output: 123 var_dump($s->c); //output: null var_dump($s-& ...
- JS中Object常用的一些属性和方法
1⃣️属性 刚接触prototype.constructor.proto这三个玩意儿的时候,是不是有点儿傻傻分不清楚的感觉?下面来简单的说下... 举
- iOS开发 - Swift实现检测网络连接状态及网络类型
一.前言 在移动开发中,检测网络的连接状态尤其检测网络的类型尤为重要.本文将介绍在iOS开发中,如何使用Swift检测网络连接状态及网络类型(移动网络.Wifi). 二.如何实现 Reachabili ...
- webapp万能选择器:iosselect
iosselect是个什么东西? 移动端浏览器对于select的展示样式是不一致的,ios下是类似原生的picker,安卓下各浏览器展示各异,我们需要一个选择器组件来统一各端下各种浏览器的展示.下面是 ...