【博客28】若你允许类型转换后进行运算,请配合non-menber函数!!

内容: 若你为你的设计的类准备了运算函数,以实现两个类对象之间的运算,而且你同时也允许其他类型隐式转换为你设计的类的对象,那么请你将运算函数定义为non-member函数,因为这样才能使得运算符左右两侧的对象既可以是一个类对象,也可以是一个非类对象,但可以隐式转换为这种类对象的对象。

情况一:定义为成员函数
代码:
在这里插入图片描述
运行结果:
在这里插入图片描述
结果分析:如果你将你的运算函数定义为你的成员函数,那么你必须保证你的运算符左侧的对象是类对象,而不能是其他对象,尽管它可以隐式转换过来。

情况二:定义为non-member函数,但构造函数为explicit
代码:
在这里插入图片描述
结果:
在这里插入图片描述
结果:也是错误的,因为你的构造不允许隐式转换,所以这种情况下,你定义为非成员函数也是解决不了的。

情况三:定义为非成员函数,且构造函数为非explicit

代码:
在这里插入图片描述
结果:
在这里插入图片描述
甚至是两侧都不是类对象,但是是可以隐式转换成类对象的,也可以。情况如下:
在这里插入图片描述
结果:
在这里插入图片描述

分析:当你的构造函数为非explicit,且你定义了non-member函数,那么你将可以在运算符两侧使用类对象或者非类对象,但是转换成类对象的对象。你的使用将变得更加灵活。

大三学生一枚,文章均非抄袭或者模仿,均为原创,仅代表个人观点,如果文章有错误的地方,欢迎在下方提出,每条评论我都会去认真看并回复,同时感谢指正的前辈。

猜你喜欢

转载自blog.csdn.net/qq_43684922/article/details/89512272