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 条评论
登录 后参与评论

相关文章

来自专栏python3

python 迭代器

一类是generator,包括生成器和带yield的generator function。

721
来自专栏java一日一条

10个经典的 Java main 方法面试题

在Java 7之前,你可以通过使用静态初始化运行Java类。但是,从Java 7开始就行不通了。

421
来自专栏应兆康的专栏

Python 实现单向链表

单向链表 #!usr/bin/env python # -*- coding:utf-8 -*- """ @author:yzk13 @time: 2...

3587
来自专栏mathor

LeetCode46. 全排列

 标准dfs问题,只不过这道题有点麻烦在于返回的是一个List嵌套List  声明一些变量,首先是ans保存最终结果,其次是path[],存储当前选取的...

1027
来自专栏java一日一条

10个经典的 Java main 方法面试题

在Java 7之前,你可以通过使用静态初始化运行Java类。但是,从Java 7开始就行不通了。

482
来自专栏https://www.cnblogs.com/L

【Scala篇】--Scala中集合数组,list,set,map,元祖

备注:数组方法 1     def apply( x: T, xs: T* ): Array[T] 创建指定对象 T 的数组, T 的值可以是 Unit, Do...

1141
来自专栏测试开发架构之路

总结了一些指针易出错的常见问题(五)

指针与链表及其操作 //结构体定义 typedef struct _person{ char* firstname; char* lastna...

2635
来自专栏Java帮帮-微信公众号-技术文章全总结

【选择题】Java基础测试二(15道)

【选择题】Java基础测试二(15道) 11.对于构造方法,下列叙述正确的是:(AC) A. 构造方法的方法名必须与类名相同; B. 构造方法必须用void...

36010
来自专栏青枫的专栏

Java中,类及其组成所使用的常见修饰符

Java中,类及其组成所使用的常见修饰符 (1)修饰符的分类: 权限修饰符:private、默认、protected、public 状态修饰符:stati...

712
来自专栏Android干货

Python对象相关内置函数

判断一个变量是否是某些类型中的一种,比如下面的代码就可以判断是否是list或者tuple:

503

扫码关注云+社区