本篇要学习的内容和知识结构概览
运算符重载使用场景
常规赋值操作
我们现在有一个类
想要实现这种赋值操作
具体实现如下:
所以说呢,我们在使用运算符进行运算的时候, 实际上也是通过函数来实现运算的.
任何运算都是通过函数来实现的, 所以通过运算符来进行计算, 实际也是通过函数来完成
运算符重载的实质
表达式 7 / 2 = 3, 7.0 / 2.0 = 3.5, 同一个运算符 / , 具有不同的意义, 称之为”运算符重载”, 实际上就是"函数重载".
每个运算符都有自己的函数形式, 像下面这些
7 + 2 的函数形式就是 operator + (7, 2)
7 - 2 的函数形式就是 operator - (7, 2)
7 * 2 的函数形式就是 operator * (7, 2)
7 / 2 的函数形式就是 operator / (7, 2)
所以, 要重载某个运算符, 只要重载相应的函数就可以了
比如:
定义的重载运算符都要求能够访问这个类型的私有成员, 在这个前提下:
要么将运算符重载为这个类型的成员函数
要么将运算符重载为这个类型的友元
将作为类的成员函数的重载运算符称为类运算符
将作为类的友元重载运算符称为友元运算符
可重载运算符和不可重载运算符的列表
下面是: 可重载运算符与只能用类运算符重载和只能用友元运算符重载和不是运算符的区分
插入符<< 和 提取符 >> 的重载
注意:
<< 或者 >> 输入流和输出流都是标准类库, 不可修改, 所以不能在它们自己的类里重载为类运算符
操作符的左边是流对象, 而不是被操作的对象,而且我们还要访问被操作对象的私有数据, 所以我们只能将它们作为被操作类对象的友元重载
注意:不能自己定义新的运算符, 只能是把原有的运算符用到自己设计的类上去
++ 运算符的重载:
作为类运算符的重载
作为友元运算符的重载
注意:
经过重载, 运算符并不改变原有的优先级, 也不改变所需操作数目
当不涉及到定义的类对象时, 它仍然执行系统预定义的运算, 只有用到自己定义的对象止, 才执行新定义的操作
类运算符和友元运算符的区别
如果运算符所需的操作数希望进行隐式类型转换, 则运算符应通过友元来重载
如果一个运算符的操作需要修改类对象的状态, 则应当使用类运算符
运算符 + 作为友元运算符
运算符 + 作为类运算符 (会出现编译错误)
注意:
在上面的main函数代码中, 如果对象作为重载运算符函数的参数, 则可以使用构造函数将常量转换成该类型的对象. 如果使用引用作为参数, 这些常量不能作为对象名使用, 所以编译错误
总结
在学习C++这门语言的时候明显的感觉到她的包罗万象, 丰富多彩. 她有自己的很多特性, 表现在使用上就是更加的灵活, 总得来说就是: 没有她没有的, 只有你想不到的!
希望对大家有帮助!
自学C/C++编程难度很大,不妨和一些志同道合的小伙伴一起学习成长!
C语言C++编程学习交流圈子,【点击进入】微信公众号:C语言编程学习基地