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

转换构造函数:

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

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前面没有参数。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Clive的技术分享

PHP常用魔术方法

方法名称 使用场景 __construct 对象创建完成后第一个被对象自动调用的方法 __destruct 销毁一个类之前执行的一些操作 ...

3724
来自专栏土豆专栏

Java面试之关键字

finalize()是Object的protected方法,子类可以覆盖该方法来实现资源清理工作,GC在回收对象之前调用该方法。

20110
来自专栏desperate633

详解javascript中的即时函数,内部函数,能重写自身的函数即时函数内部函数返回函数的函数能重写自己的函数小结

在上篇谈到匿名函数和回调函数的基础上,我们接着介绍javascript中的即时函数,内部函数,返回函数的函数,能重写自身的函数等几种常见的函数类型及使用方法。只...

821
来自专栏程序员互动联盟

【java基础】匿名类

昨天后台的一个小伙伴提到了,java里面的匿名类,这个概念在平常java码代码的时候用的特别多,所以找了一篇介绍表述比较清晰的文章分享给大家,能极大的简化代码量...

3567
来自专栏前端知识分享

第38天:运算符、字符串对象常用方法

console.log(0||1);   1 console.log(1||0);   1 console.log(1||5);   1 console.log...

822
来自专栏java初学

5.7 (2)反射举例

37012
来自专栏机器学习从入门到成神

java中关于继承的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/articl...

1110
来自专栏技术之路

详解 常量指针和指针常量

说一下 常量指针和指针常量 的区别。 常量指针   指向常量的指针,也就是说指针指向的对象是常量,指向的常量不能修改。指针不是一个常量, 可以把指针指向别一个常...

1827
来自专栏海天一树

小朋友学Python(12):运算符

一、基本运算符 Python运算符多数与C/C++/Java类似,但有两个不一样。“//”表示求商,“**”表示求幂 例1 a = 10 b = 3 x = a...

2655
来自专栏我的博客

插入排序

原理: 1. 从第一个元素开始,该元素可以认为已经被排序 2. 取出下一个元素,在已经排序的元素序列中从后向前扫描 3. 如果该元素(已排序)大于新元素,...

2426

扫码关注云+社区