不同类型数据间的转换

1.标准类型数据之间的转换

(1)隐式类型转换:

例如:

int i=6;

i=7.5+i;

(2)显示类型转换

类型名(数据)      C++采用的形式

(类型名)数据      C语言采用的形式

2.用转换构造函数进行类型转换

转换构造函数也是一种构造函数,转换构造函数只有一个形参,如:Complex(double r) { real=r; image=0;}

归纳起来,使用转换构造函数将一个指定的数据转换为类对象的方法如下:

(1)先声明一个类;

(2)在这个类中定义一个只有一个参数的构造函数,参数的类型是需要转换的类型,在函数体中指定转换方法;

(3)在该类的作用域内可以用一下形式进行类型转换

        类名(指定的数据类型)

就可以将指定的数据类型转换为此类的对象。

不仅可以将一个标准类型数据转换成类对象,而且可以将另一个类得对象转换成转换构造函数所在的类对象,例如可以将一个学生类对象转换成教师类对象,可以在Teacher类中写出下面的转换构造函数:

Teacher(Student &s){num=num.s;name=s.name;sex=s.sex;}

注意:s中的num,name,sex必须是公用成员。

3.用类型转换函数进行类型转换

C++提供类型转换函数,其作用是将一个类得对象转换成另一个类型的数据。

类型转换函数地一般形式:

operator 类型名()

{实现转换语句}

其中,operator 类型名是函数名,函数名前不能指定函数类型,函数没有参数,其返回值的类型是有函数名中的类型名指定的。类型转换函数只能是类成员函数,因为转换的主体是该类的对象,不能作为友元函数或者普通函数。

下面是使用类型转换函数地例子:

#include <iostream>
using namespace std;
class Complex
{
public:
 Complex(){real=0;image=0;}
 Complex(int r,int i){real=r;image=i;}
 operator double(){return real;}  //类型转换函数
private:
 double real;
 double image;
};
int main()
{
 Complex c1(3,4),c2(5,-10),c3;
 double d;
 d=2.5+c1; //要求一个double数据和Complex数据相加,相当于d=2.5+double(c1);
 cout<<d<<endl;
 return 0;
}

重要结论:

在已定义了相应的转换构造函数情况下,将运算符“+”函数重载为友元函数,在进行两个复数相加时,可以用交换律。如果运算符函数重载为成员函数,它的第一个参数必须是本类的对象。当第一个操作数不是类对象时,不能将运算符函数重载为友元函数。如果将运算符“+”函数重载为类成员函数,交换律不适用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值