不同类型数据间的转换

对于标准数据类型的转换,编译系统有章可循,知道怎样进行转换。而对用户自己声明的类型,编译系统并不知道怎样进行转换,解决这个问题的关键是让编译系统知道怎样去进行折现转换,需要定义一些专门的函数类处理。

1、转换构造函数

转换构造函数的作用是将一个其它类型的数据转换成一个类的对象以复数类Complex为例,我们来介绍一下 转换构造函数。

转换构造函数是构造函数的重载,它只有一个形参,如

Complex(double r)

{

_real=r;

_imag=0;

}

其作用是将double类型的参数r转换成Complex类的对象,将r作为复数的实部,虚部为0。用户可以自己根据需要定义转换构造函数,在函数体中告诉编译系统怎样去进行转换。在类体中,可以有转换构造函数,也可以没有转换构造函数,视情况而定。假如在Complex类中定义了上面的转换构造函数,在Complex类的作用域中有以下声明语句:

Complex c(2.4)               //建立对象c,由于只有一个参数,所以调用转换构造函数

建立对象c,其实部值为2.4,虚部值为0。它的作用就是将double类型的常数转换成一个名为c的Complex类对象。

如果已经对+运算符进行了重载,使之能进行两个Complex类对象的相加则:

c1=c+1.2;                 //错误,不能将一个Complex类对象与浮点数相

c2=c+Complex(1.2);        //正确,将1.2转换成Complex类的对象

不仅可以将一个标准类型数据转换成类对象,也可以将另一个类的对象转换成转换构造函数所在的类的对象。

2、类型转换函数

类型转换函数的作用是将一个类对象转换成另一类型的数据。假设已经声明了复数类Complex,则可以这样定义类型转换函数:

operator double()

{

return _real;

}

函数返回double型变量_real的值。它的作用是将一个Complex类的对象转换成一个double类型的数据,其返回值是Complex类中数据成员_real的值。

注意,这个函数不能指定类型,没有参数operator double是函数名,这和运算符重载是一样的。类型转换函数的一般类型是:

operator 类型名()

{实现转换的语句}

其返回值的类型与函数名中的类型一致,类型转换函数只能作为成员函数,因为转换的主体是类的对象。转换构造函数和类型转换函数有一个共同的功能,当需要的时候,编译系统会自动调用,建立一个无名的临时对象。

例:定义d1,d2是double类型,c1是Complex类对象,类中已经定义类型转化函数。

d1=d2+c1   //系统会将c1转换成double类型数据,建立一个临时的double类型变量,d2相加,最后将一个double类型数据赋给d1。

时间: 2024-11-04 22:48:16

不同类型数据间的转换的相关文章

可空值类型与值类型这间的转换

int s = 5; int? s_null; long t; long? t_null; t = s; //隐式转换 S -> T s = (int)t; //显示转换 T -> S s_null = s; //隐式转换 S -> S? s = (int)s_null; //显示转换 S? -> T t_null = s_null; //隐式转换 S? -> T? s_null = (int?)t_null; //显示转换 T? -> S? t_null = s; /

python字典转化成json格式。JSONEncoder和JSONDecoder两个类来实现Json字符串和dict类型数据的互相转换

遇到问题:进行Webservice接口测试时,对接口入参数据进行了处理,变成了dict格式,去进行接口请求报错. 需要转成成json格式,双引号去扩. 如下: 更改代码: # 在Python标准库的json包中,提供了JSONEncoder和JSONDecoder两个类来实现Json字符串和dict类型数据的互相转换. from json import * if __name__=="__main__": d={} d['a'] =1 d['b']=2 d[3]='c' d[4]=['

基本数据类型,包装类型,String类型数据之间的转换

java中所有的类都从java.lang.Object类派生而来,在java语言中,除基本数据类型以外,基本数据类型有java类库体统了包装类:Integer类保存整形变量,Boolean类保存布尔变量,Float类保存单精度变量, 基本数据类型与包装类.String类的互相转换 基本数据类型→包装类,调用包装类构造 int a = 10; Integer b = new Integer(a); 包装类→基本数据类型,调用包装类对象的**value(),Integer b = new Integ

SpringMVC 处理Date类型数据@InitBinder @DateTimeFormat 注解 的使用

使用SpringMVC的时候,需要将表单中的日期字符串转换成对应JavaBean的Date类型,而SpringMVC默认不支持这个格式的转换,解决方法有两种,如下: 方法一 . 在需要日期转换的Controller中使用SpringMVC的注解@initbinder和Spring自带的WebDateBinder类来操作. /* 以下资料来自网络 */ 用@InitBinder注解的控制器方法,允许你直接在你的控制器类中配置 Web 数据绑定.@InitBinder标记初始化WebDataBind

C++ 各种基本类型间的转换

常用的转换方法: 流转换 STL标准函数库中函数转换 流转换 流转换主要是用到了<sstream>库中的stringstream类. 通过stringstream可以完成基本类型间的转换, 1 #include<sstream> 2 3 using namespace std; 4 5 template<typename out_type, typename in_value> 6 7 out_type convert(const in_value & t){

接口——嵌套,接口和类型间的转换,空接口类型,类型分支

1.嵌套 在 Go语言中,不仅结构体与结构体之间可以嵌套,接口与接口间也可以通过嵌套创造出新的接口. 一个接口可以包含一个或多个其他的接口,这相当于直接将这些内嵌接口的方法列举在外层接口中一样.只要接口的所有方法被实现,则这个接口中的所有嵌套接口的方法均可以被调用. 2.接口和类型间的转换 Go语言中使用接口断言(type assertions)将接口转换成另外一个接口,也可以将接口转换为另外的类型. 1)类型断言的格式 类型断言是一个使用在接口值上的操作.语法上它看起来像 i.(T) 被称为断

Python常见字符编码间的转换

学习Python,字符编码间的转换是绕不过去的一只拦路虎,不把编码彻底搞明白,总有一天它会猝不及防坑你一把. Python2.x和Python3.x在字符编码的设置上也有很大区别(Python3未来将是主流,所以Python3为主),今天我们就来一起学习下. 上一篇文章里我已经简述了Python的常见编码了,这里就不再赘述了,还不清楚的小伙伴可以先去看下:     http://www.cnblogs.com/schut/p/8406897.html 一.Unicode 和 UTF-8的纠葛 U

Go之数据类型间的转换

一:转换语法注意 Go在不同数据类型之间赋值时需要显式的转换,不像其他如php,java可自动转换. 二:简单举例 三:数字间转换使用细节 ①:数字间类型转换从小转到大的数据类型范围,也可从大转到小的数据类型范围,只不过,大范围如int64转int8,有可能导致溢出处理,所以转换时要注意范围. 如下图就是一个典型的溢出 ②:不同数字类型之间不直接相加. 三:其他数据类型与字符串类型得转换 ①:fmt.Sprintf方式转换为字符串 ②:strconv包函数方式转换字符串类型 1)布尔类型strc

Cassandra存储time series类型数据时的内部数据结构?

因为我一直想用Cassandra来存储我们的数字电表中的数据,按照之前的文章(getting-started-time-series-data-modeling)的介绍,Cassandra真的和适合用于存储time series类型的数据,那么我就想要弄清楚,对于下面这张表 CREATE TABLE temperature ( weatherstation_id text, event_time timestamp, temperature text, PRIMARY KEY (weathers