C++转换构造函数与类型转换构造函数

转换构造函数:函数

 转换构造函数的只有一个形参:spa

1 Student(float s)
2 {
3     score = s;
4     age = 0;    
5 }

 若是已经在上面定义了构造函数:code

1 Student(85);        //创建对象c1,因为只有一个参数,调用转换构造函数

若是对“+”进行了重载,那么如下是编译错误的:对象

1 stu2 = stu1 + 85;        //这样编译错误
2 stu2 = stu1 + Student(85);    //合法,将85转换为Student类对象

注意:在已定义的相应的转换构造函数状况下, 将运算符“+”函数重载为友元函数,在进行两个复数相加时,能够用交换律; blog

   若是是重载为成员函数的话,那么交换律不适用;编译器

 

类型转换构造函数:编译

用转换构造函数能够将一个类型数据转换成类的对象,但不能将一个类的对象转换成一个类型数据;所以咱们须要另外一种方法来实现这种功能:class

C++提供了类型转换函数来解决这种问题:构造函数

1 operator float()
2 {
3     return score;
4 }

 下面是一个使用类型转换的简单例子:float

 1 class Student
 2 {
 3     private:
 4         float score;
 5         int age;
 6     public:
 7         Student(void){age = 18;  score = 0;}
 8         Student(int a, float s){age = a; score = s;}
 9         operator float(){return score;}
10 };
11 
12 int main()
13 {
14     Student stu1(18,  86), stu2(18, 97.5);
15     float f;
16     f = 6.75 + stu2;        //当须要的时候,编译器会自动调用这些函数
17     cout << f << endl;
18     return 0;
19 }    
20 /*
21 运行结果:
22 104.25
23 Press any key to continue
24 */

 编译器系统发现有对float的重载,所以调用了这个函数;

注意:operator前面没有参数。

相关文章
相关标签/搜索