运算符重载----学校版本

1.重载为普通函数

(1)我们这里的运算符重载是使用复数的加减法作为例子的,复数就是我们之前熟知的但是并不会经常使用的例如这种a+bi类似的这样的数,复数划分为实部和虚部,我们这里想要实现的就是实部和实部的相加,虚部和虚部的相加;

(2)我们定义了一个复数类,使用运算符的重载实现这个复数的加减操作;

(3)这个就是我们重载的一个普通的全局函数,相当于就是对于加号这个运算符的重载,参数是引用类型的,所以前面最好是加上const进行修饰;

c=a+b等效于c=operator+(a,b)这个表达,real就是复数里面的实部,image就是复数里面的虚部,两个复数相加就是对应的实部和实部相加,虚部和虚部相加,两个复数相加的结果还是复数,所以这个返回值的类型我们确定是complex类型的;

 

2.重载为成员函数

(1)上面介绍的是复数的加法的普通的函数,我们可以把这个函数写成成员函数的,就是让这个函数在类里面进行声明,然后在类的外面进行定义,具体的操作方法如下;

(2)就是在这个类里面进行声明,外面进行定义,需要注意的是即使是执行的减法运算,和加法的相同点就在于这两个运算的操作数都是两个,但是具体写在参数位置的时候,就不会写2个,成员函数只需要写一个参数,因为我们在调用成员函数的时候,例如ab这两个复数的减法,我们调用的时候是a.operator-(b)这样的方式进行调用的,写的话我们就写作a-b就可以了;

(3)总结来讲:重载为成员函数时候,参数的个数是运算符的目数减去1,重载为普通函数的时候,这个参数的个数就是我们的操作符的目数(目数就可以简单的理解为这个操作数的个数); 

3.重载为友元函数

(1)大部分情况下,这个运算符重载为成员函数就是最好的选择;

(2)但是在一些情况下面,我们使用这个成员函数是没有办法满足需求的,但是使用这个普通的函数有没有办法去访问这个私有的成员变量,这个时候我们就应该设置为这个友元类的函数;

(3)什么情况下是没有办法满足需求呢?我们来看一下,就是我们想要实现一个数字和复数的加法运算,这个时候,成员函数就没有办法满足我们的需求了;

(4)普通函数呢,普通的函数我们没有办法去调用这个成员变量real和image,所以这个普通的函数也是行不通的,这个时候我们就要使用的是友元函数;

(5)友元函数就是再定义一个函数,让这个函数的加法实现的是double和complex的加法,这样我们就可以去访问私有的成员变量了;

 (6)实际上,刚开始学的时候,我就在想,这样做的话,这个友元函数的作用好像是可有可无的,因为我初始的时候认为搞两个成员函数不就可以了吗,但是实际上这个会出错,报错的信息就是参数过多,可能是因为这个地方我们对于这个加号运算符重载两次导致的;

 (7)由此可见,这个友元函数还是很有必要的,是不能够被两个成员函数代替的,希望读者多去领悟。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值