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