C++之运算符重载(二元)

本秂侑毒 提交于 2020-02-05 05:24:44

 

一、加号+

1.成员函数重载

 

 

2.友元函数重载

 

 

二、输出符号<<

 

 

三、索引符号 [ ]

 

四、补充说明

1.《二元运算符重载》课程评论:

(一)为什么<<运算符的重载必须定义为友元

如果在类中定义非友元成员函数,默认第一个参数默认会传入this*指针,这时就无法实现cout在前<<对象在后的格式

因为二元运算符中的调用格式是 参数一 运算符 参数二

这也就是为什么 加号运算符可以使用非友元成员函数,因为参数一是一个this*指针,参数二是其它对象

假设定义为非友元成员函数,那么第一个参数系统默认为this*(且无法更改),第二个参数是cout

那么调用格式就变成了 coor << cout了,这就是不能定义为非友元成员函数的原因

(二)
这里对于输出运算符重载讲得一般,当时课程上学习的时候,这里返回值为out是有原因的。

cout<<coor1<<coor2<<endl;

上面这个例子中,第一次重载<<的时候cout作为第一个参数,coor作为第二个参数,返回出来out的引用,这个out引用的是"cout<<coor1",

第二次重载的时候是将这个cout<<coor1整个作为out流对象,做成第一个参数。

 


2.《二元运算符重载》课程评论:

来吧!让我给您们解释一下为什么<<只能友元,而[]只能成员重载;

简而言之:

<1> 对于友元重载没有this指针指向当前对象的!这个可以从单目运算符重载时返回形参而不能返回this可知!

所以必须为参数一+运算符+参数二出现的表达式才能用友元!

<2> 二元运算符的成员函数重载,或一元运算符成员函数重载,默认在符号前有个this指针,指向当前对象的!

这也就为什么,二元重载还需有一参,一元重载不用参!

好了~~~这就很好解释,若<<采用成员函数重载,那么this指针指向的是cout!这是错误的~~~this无法实例;其次[]采用友元,那就没有第二参数了~~~

 

 

3.对于输出运算符“<<”来说,传入的第一个参数必须是ostream,不能是this指针,所以输出符号“<<”不能通过成员函数重载,必须使用friend友元函数进行重载。

 


4.索引运算符“[]”不能采用友元函数重载 原因??

友元函数重载的第一个参数可以是成员函数重载中的this指针也可以是其他的值,可是索引运算符的第一个参数必须是this指针,

因为只有第一个参数是this指针才能够传入索引,才能够使得这个索引所表达的是当前这个对象当中的成员

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!