【C++学习笔记】运算符重载(一)

在C++中我们定义了自己专属的类,但是随着类的增加,以及里面成员复杂度的提高,以前我们常用的运算符就不能很好的处理新出现的数据类型了,这时,就有一个很“异想天开”的想法了——我们自己定义运算符!

运算符的重载

运算符重载是使同一个运算符作用于不同类型的数据时具有不同的行为。例如我们声明一个点类point和它的对象point p1(1,1),p2(3,3),并希望能使用“+”运算符来实现表达式“p1+p2”,这时就需要重载运算符了。

运算符重载实质上是将运算对象转化为运算函数的实参,并根据实参的类型来确定重载的运算函数
我们可以这么想,其实运算符本质上是一个运算函数,作为函数,当然可以对其进行重载了。当然,运算符重载也是多态性的一种表现方式啦。

运算符重载的格式

将运算符重载为类的成员函数就是在类中用关键字operator定义为一个成员函数,函数名就是重载的运算符。运算符如果为类的成员函数,它就可以自由地访问该类的成员。
格式:
<类型(int、double、void。。。。)> <类名>::operator <要重载的运算符>(形参表){
函数体
}

如果需要运算符重载为类的友元函数时,语法为:
friend <类型(int、double、void。。。。)> <类名>::operator <要重载的运算符>(形参表){
函数体;
}

具体重载格式

我们可以见下表:在这里插入图片描述

注意点是双目运算中形参表中只有一个形参。在非友元函数中,前置单目运算符括号里没有形参而后置单目运算符里是有形参的。

重载运算符的局限性:

  1. 不可臆造新的运算符。必须把重载运算符限制在C++语言中已有的运算符范围内的允许重载的运算符之中。
  2. 不可以重载以下几种运算符:1.类属关系“.”、成员指针运算符“*”、sizeof运算符和三目运算符
  3. 要坚持四个不能改变:1. 不能改变运算符操作数的个数;2.不能改变运算符原有的优先级;3.不能改变运算符原有的结合性;4.不能改变运算符原有的语法结构。
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43819313/article/details/85039732
今日推荐