一、标准类型数据间的转换
C++还提供显式类型转换,程序人员在程序中指定将一种指定的数据转换成另一指定的类型, 其形式为类型名(数据)
如
int(89.5)
其作用是将89.5转换为整型数89。
对于用户自己声明的类型,编译系统并不知道怎样进行转换。解决这个问题的关键是让编译系统知道怎样去进行这些转换,需要定义专门的函数来处理。
二、转换构造函数
转换构造函数(conversion constructor function) 的作用是将一个其他类型的数据转换成一个类的对象。 这里回顾一下以前学习过的几种构造函数:- 默认构造函数。以Complex类为例,函数原型的形式为
Complex( ); //没有参数 - 用于初始化的构造函数。函数原型的形式为
Complex(double r,double i); //形参表列中一般有两个以上参数 - 用于复制对象的复制构造函数。函数原型的形式为
Complex (Complex &c); //形参是本类对象的引用 - 现在又要介绍一种新的构造函数——转换构造函数。
转换构造函数只有一个形参,如
Complex(double r) {real=r;imag=0;}
其作用是将double型的参数r转换成Complex类的对象,将r作为复数的实部,虚部为0。用户可以根据需要定义转换构造函数,在函数体中告诉编译系统怎样去进行转换。
在类体中,可以有转换构造函数,也可以没有转换构造函数,视需要而定。以上几种构造函数可以同时出现在同一个类中,它们是构造函数的重载。编译系统会根据建立对象时给出的实参的个数与类型选择形参与之匹配的构造函数。
使用转换构造函数将一个指定的数据转换为类对象的方法如下:
- 先声明一个类。
- 在这个类中定义一个只有一个参数的构造函数,参数的类型是需要转换的类型,在函数体中指定转换的方法。
- 在该类的作用域内可以用以下形式进行类型转换:
类名(指定类型的数据)
就可以将指定类型的数据转换为此类的对象。
不仅可以将一个标准类型数据转换成类对象,也可以将另一个类的对象转换成转换构造函数所在的类对象。如可以将一个学生类对象转换为教师类对象,可以在Teacher类中写出下面的转换构造函数:
Teacher(Student& s){num=s.num;strcpy(name,s.name);sex=s.sex;}
但应注意: 对象s中的num,name,sex必须是公用成员,否则不能被类外引用。