龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

C++:类型数据间的转换(3)

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
【3】使用转换构造函数的方式修复之 将2.5先转换成Complex类类型,然后重载运算符+对两个类对象间实现+操作。 class Complex{ public: Complex(double r,double i){ re

  【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

精彩图集

赞助商链接