C++:类型数据间的转换(3)
【3】使用转换构造函数的方式修复之
将2.5先转换成Complex类类型,然后重载运算符+对两个类对象间实现+操作。
class Complex{
public:
Complex(double r,double i){
real=r;
imag=i;
}
Complex(double r){
real=r;
imag=0;
}
Complex operator+(Complex&);//重载+运算符
…
};
Complex Complex:: operator+(Complex &c){
return Complex(real+c.real,imag);
}
int main(){
Complex c(0,0);
Complex c1(2.5);//使用转换构造函数
c=c+c1;
...
不仅可以将一个标准类型数据转换成类对象,也可以将另一个类的对象转换成转换构造函数所在的类对象。下面定义一个从类Student到类Teacher的转换。
Teacher(Student&s){
num=s.num;
strcpy(name,s.name);
sex=s.sex;
}
用转换构造函数可以将一个指定类型的数据转换为类的对象。但是不能反过来将一个类的对象转换为一个其他类型的数据(如将一个Complex类对象转换成double)。下面介绍类型转换函数可以实现这一点。
3.用类型转换函数进行类型转换
类型转换函数(type conversion function)作用是将一个类的对象转换成另一类型的数据。
类型转换的一般形式为,
operator 类型名(){
实现转换的语句
}
在函数名前不能指定函数类型,函数没有参数。在下面的例子中,Complex类提供将一个Complex对象转换为double的类型转换函数。
class Complex{
public:
Complex(double r=0,double i=0){
real=r;
imag=i;
}
operator double(){//类型转换函数
return real;
}
private:
double real,imag;
};
int main(){
Complex c;
double d;
d=c+2.5;//ok
system("PAUSE");
return EXIT_SUCCESS;
}
由此可见,转换构造函数与类型转换函数有一个共同的功能:当需要的时候,编译器会自动调用这些函数,建立一个无名的临时对象(或临时变量),实现类型间的转换。
转换构造函数完成的是由标准数据类型(或一个类类型)转换至当前类类型;类型转换函数完成的是由当前类类型转换至标准数据类型。
本文出自 “子 孑” 博客,请务必保留此出处http://zhangjunhd.blog.51cto.com/113473/57650
- 上一篇:rdbuf的使用
- 下一篇:C++:虚函数与抽象类





