转换构造函数:
转换构造函数的只有一个形参:
1 Student(float s)
2 {
3 score = s;
4 age = 0;
5 }
如果已经在上面定义了构造函数:
1 Student(85); //建立对象c1,由于只有一个参数,调用转换构造函数
如果对“+”进行了重载,那么以下是编译错误的:
1 stu2 = stu1 + 85; //这样编译错误
2 stu2 = stu1 + Student(85); //合法,将85转换为Student类对象
注意:在已定义的相应的转换构造函数情况下, 将运算符“+”函数重载为友元函数,在进行两个复数相加时,可以用交换律;
如果是重载为成员函数的话,那么交换律不适用;
类型转换构造函数:
用转换构造函数可以将一个类型数据转换成类的对象,但不能将一个类的对象转换成一个类型数据;因此我们需要另一种方法来实现这种功能:
C++提供了类型转换函数来解决这种问题:
1 operator float()
2 {
3 return score;
4 }
下面是一个使用类型转换的简单例子:
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前面没有参数。
原文链接: https://www.cnblogs.com/linhaostudy/p/5676864.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/237185
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!