快速业务通道

C++类型数据间的转换

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29

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

1.1隐式类型转换

int i=6;
i=4.5+i; [Warning] converting to `int'' from `double''
cout<<i<<endl;

结果:

10

这里编译器会给 出警告,因为编译器会对4.5做double类型处理,在求解表达式时,6转换成double,然后 与4.5相加,得到10.5,在向整型变量赋值时,将10.5转为为整数10,然后赋给i。整个过 程由C++编译器自动完成,因此此类转换称为隐式类型转换。

1.2显式类型转换

C++也提供显式类型转换,其形式为,

类型名(数据),如int(11.1);// 将11.1转换成整型11。

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

2.1什么是转换构 造函数

通常把有一个参数的构造函数用作类型转换,称其为转换构造函数(有一 个参数的构造函数也可以不用做类型转换)。转换构造函数的作用是将一个其他类型的数 据转换成一个类的对象。

2.2四种类型的构造函数

到目前为止,已经接触 了4种类型的构造函数,它们分别是(用例为一复数类Complex),

【1】默认构造 函数。

Complex();//没有参数

Complex(double=0,double=0);// 提供默认的参数值

【2】用于初始化的构造函数

Complex(double r,double i);//形参列表一般有两个以上参数

【3】复制构造函数

Complex(Complex&);//形参是本类对象的引用

【4】转换构造函数

Complex(double r){
 real=r;
 imag=0;
}

其作用是将double型的参数转换成Complex类的对象,将r作为复数实部, 虚部为0。

2.3转换构造函数的使用

使用转换构造函数将一个指定的数据转 换为类对象的方法:

【1】先声明一个类(如上面的Complex);

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

【3】在该类的作用域内可以用以下形式进行类型转换,

类名(指定类型的数据)

2.4一个实例

【1】提出问题

下面 给出一个复数类Complex,提供了2种构造函数。

class Complex{
  public:
  Complex(double r,double i){//用于初始化的构造函数
    real=r;
   imag=i;
  }
  Complex(double r){//转换构造函 数
   real=r;
   imag=0;
  }
 private:
   double real,imag;
};
int main(){
 Complex c(0,0); //使用初始化 构造函数
 c=c+2.5;error: no match for ''operator+'' in ''c + 2.5e+0''

这里报错,意思是+号运算符没有被重载以用于Complex类对 象与double之间的操作。

【2】使用重载加运算符的方式修复之

class Complex{
 public:

  Complex operator+(double);//声明重载运算符+

};
Complex Complex:: operator+(double r){
 return Complex(real+r,imag);
}
int main(){
 Complex c(0,0);
 c=c+2.5; //ok

【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;
}

用转换构造函数可以将一个指定类型的数据转换为类 的对象。但是不能反过来将一个类的对象转换为一个其他类型的数据(

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号