当前位置:天才代写 > tutorial > C语言/C++ 教程 > C++范例数据间的转换

C++范例数据间的转换

2017-11-03 08:00 星期五 所属: C语言/C++ 教程 浏览:466

副标题#e#

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。


#p#副标题#e#

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;
...

#p#副标题#e#

不只 可以将一个尺度范例数据转换成类工具,也可以将另一个类的工具转换成转换结构函数所 在的类工具。下面界说一个从类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的类 型转换函数。

#p#分页标题#e#

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

 

    关键字:

天才代写-代写联系方式