大家好
欢迎回来继续学习
C++语言程序设计
这一节我们来学习
如何将运算符
重载为类的成员函数
运算符呢
通过有双目运算符 单目运算符
在这一节呢
我们要分别来讲解
怎么样重载双目运算符
怎么样重载单目运算符
那么将运算符
重载为类的成员函数的时候
我们要用这样的形式
来定义这个运算符函数
其实呢
就跟定义类的普通成员函数
语法基本上是一样的
只是这个函数名不同
这里将operator这个关键字
和运算符合起来
作为函数名
当然了operator和关键字中间
还必须得有个空格
它们两个合在一起作为函数名
那么这样的一个运算符函数
它的形参表有什么规则呢
形参表里面的参数个数
应该是原有的操作数个数减1
比如说
要是一个双目运算符
那么形参里面
放的实际上是它第二个操作数
如果是前置的单目运算符呢
它就没有形参了
形参表就空了
但是如果是后置的单目运算符
那情况就有点特殊
稍后大家会看到
好 现在我们来看一下
怎么样重载一个双目运算符
那么如果呢我们要将
一个双目运算符比如说B
用B这个符号来代表
一个双目运算符
一个泛指的双目运算符
比如说
我们要将这个双目运算符B
重载为某个类的成员函数
使它能够去实现
这个表达式
操作数1 B 操作数2
让它实现这样一个表达式
那么怎么重载呢
这里我们要假设
这个操作数1所属的类
类名是A
也就是操作数1
是A类的对象
这里操作数1
必须是某个类的对象
如果它不是类的对象
左操作数如果是基本类型
我们是不能把这个运算符
重载为类的成员函数的
这样的情况呢
我们后面会介绍
要重载为非成员函数
好 那现在呢
第一个操作数oprd1
是A类的对象
那么我们就将B呢
重载为A类的成员函数
这个时候形参类型
就应该是操作数2
所属的类型
那么经过这样重载以后
如果程序中
出现了表达式
操作数1 B 操作数2
那么就相当于
通过操作数1这个对象
去调用operatorB这个函数
并且以操作数2为实参
下面呢
我们就通过这个实例
给大家演示一下
怎么样将一个双目运算符函数
重载为类的成员函数
在这个例题中呢
我们为复数类重载加法
和减法运算符函数
那么在这个例题中呢
要求将+ -运算
重载为复数类的成员函数
那么规则呢
当然就要遵循
数学里面的复数的
加减法的运算规则了
就是实部 虚部分别相加相减
那么在这个例题里面
我们要求两个操作数
都是复数类的对象
其实等看完这个例题以后
大家可以尝试一下
比如说让这个复数类
不仅可以实现复数加复数
复数减复数的运算
也要能够实现复数加实数
复数减实数的运算
怎么实现这一点呢
那我们就要再增加
不同形式的运算符重载函数
比如说让参数是实数
就可以实现这样的功能
那么大家看完这个例题以后呢
可以尝试自己改编
增加更多的运算符重载函数进去
实现更多的运算功能
但是如果大家想实现
实数加复数 实数减复数
那么用重载成员函数的方法呢
就不能够实现了
现在我们首先来看一下
这个题目的原代码
在这个复数类中
我们定义了加法运算符函数
还有减法运算符函数
这两个函数
它都是来实现双目运算符的
所以呢
括号里面的参数
就是它的右操作数
现在我们来看函数的实现
这是个函数体的实现
在函数体中呢
我们没有定义局部对象
来存储加法的结果
减法的结果
而是直接构造了
一个临时无名对象
作为结果返回给调用者
这个临时无名对象构造的时候
它的初始化参数呢
就分别是当前对象的实部
和参数对象的实部相加
当前对象的虚部
与参数对象的虚部相加
这样构成了初始化参数
实部和虚部
这也就是复数加法本身的规则
这样呢
就是构造这个临时无名对象以后
将这个临时无名对象
就返回给调用者
那减法的实现也是一样的
经过定义这样的加法和减法
运算符重载函数以后呢
我们看
在主函数中
我们定义了复数类对象c1 c2
然后我们就可以
对c1 c2进行减法操作
进行加法操作了
然后把运算结果呢
赋值给这个结果对象c3
这里我们也看到了
这个输出的情况
运算的结果是正确的