c++远征之模板篇——运算符重载

以下内容源于慕课网的学习整理,如有侵权,请告知删除。


一、运算符重载的概念

  • 给原有的运算符赋予新的功能
  • 比如下面的截图,本来加号+并不具备坐标的相加的功能,但是通过运算符重载可以实现该功能。
c++远征之模板篇——运算符重载

二、运算符重载的本质

  • 本质是函数的重载;
  • 重载方式:友元函数重载、成员函数重载。即定义成一个类的友元函数,或者成员函数。

三、运算符重载的关键字operator

1、一元运算符重载

负号的重载

(1)成员函数重载

  • 虽然它不含有参数,但是它作为普通的成员函数,还是有一个隐性的this指针作为参数的。
  • 函数返回应该是它本身(只是成员取反了而已),因此应该是返回值是“类&”的形式。

c++远征之模板篇——运算符重载   


c++远征之模板篇——运算符重载

  • 注意到它也是一个函数,因此有两种方式表示。

c++远征之模板篇——运算符重载


(2)友元函数重载

  • 需要传入参数

c++远征之模板篇——运算符重载

c++远征之模板篇——运算符重载

c++远征之模板篇——运算符重载



++符号的重载

(1)前置++符号重载

  • 下面是成员函数重载的形式

c++远征之模板篇——运算符重载

c++远征之模板篇——运算符重载

c++远征之模板篇——运算符重载


(2)后置++符号重载

  • 返回值不再是引用,而是一个对象。为什么呢?
  • 传入int,标明++符号是后置的而已,没有其他用途。

c++远征之模板篇——运算符重载

c++远征之模板篇——运算符重载

c++远征之模板篇——运算符重载



2、二元运算符重载

加号运算符的重载

(1)成员函数重载形式

c++远征之模板篇——运算符重载

c++远征之模板篇——运算符重载

c++远征之模板篇——运算符重载


(2)友元函数重载形式


c++远征之模板篇——运算符重载


c++远征之模板篇——运算符重载


c++远征之模板篇——运算符重载



输出运算符的重载

  • 采用友元函数重载的方式,不能采用成员函数重载的方式。

c++远征之模板篇——运算符重载


c++远征之模板篇——运算符重载


c++远征之模板篇——运算符重载


索引运算符的重载 [ ]

  • 索引运算符不能使用友元函数重载的方式,只能用成员函数重载的方式

c++远征之模板篇——运算符重载  

c++远征之模板篇——运算符重载 

c++远征之模板篇——运算符重载