您的位置:首页 > 其它

不同类型数据间的转换

2017-07-29 11:31 204 查看
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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: