不同类型数据间的转换

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

1、转换构造函数

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

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

Complex (double r)
{
    _real = r;
    _imaginary = 0;
}

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

Complex c (2.8)         // 初始化对象c,有一个参数,就会调用转换构造函数

        初始化对象c,实部为2.8,虚部为零。他的作用就是将double类型的常数转换为一个名为c的Complex类对象。

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

c1 = c + 1.4;                //错误,不能让一个Complex类对象与浮点数相加
c2 = c + Complex (1.4);        //正确,转换构造函数把1.4转为Complex类的对象

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

2、类型转换函数

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

operator double()
{
    return _real;
}

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

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

operator 类型名()

{实现转换的语句}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值