【总结C++运算符重载】

204 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情

1️⃣前言

今天笔记的内容是:

  • 总结运算符的重载

运算符的重载,使得程序更加容易理解,便于我们对类的对象进行操作。


2️⃣如何理解运算符重载?

运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。

  • 运算符重载是一种形式上的C++多态
  • 事实上很多C++运算符都实现了重载,比如运算符*
  • *运算符用于地址,将得到存储在该地址中的值
  • *运算符用于两个数字时,将得到它们的乘积
  • 同样的,当我们定义一个类后,创建两个类的对象
  • 接着将两个对象相乘,显然编译器并不知道该如何操作
  • 只有将*号运算符重载后才能实现两个对象的相乘,这就是运算符重载

运算符重载是C++的特性之一,它使得我们能够将运算符的定义扩展到自定义的数据类型中。

运算符重载使得C++的代码更加直观且易读,简洁易懂。


3️⃣如何重载运算符?

关键字

  • operator

重载的格式

运算符重载的格式为:

image.png

举个例子:

我们定义一个myClass类,然后对加号运算符进行重载:

image.png

image.png

需注意的点

  1. 优先性与结合性不能变!

因为运算符是C++内部定义好了的,具有一定语法规则,如运算时的优先性以及结合性等。

在重载运算符时,需注意其运算顺序和优先性等不能改变!

  1. 操作数的个数不能变!

运算符根据操作数的不同,可分为单目运算符和双目运算符等。

在重载运算符时,必须注意,不能改变操作数的个数。

比如乘法运算符*的操作数是两个,即A*B,这是我们在重载时就不能修改*的操作数个数。

不然会导致程序报错,编译错误!

  1. 不能凭空创造运算符!

不能创建新的运算符,不然会导致编译出错。

例如,下面的操作是错误的:

image.png


4️⃣无法重载的运算符

几乎所有的C++运算符都可以被重载但是,C++规定有些运算符无法进行重载!

如下所示:

  • 点操作符(.
  • 域操作符(::
  • 成员间访问操作符(.*
  • 成员指针操作符(->*
  • 条件操作符(? ::

之前有写过几个小例子,链接如下:


5️⃣写在最后

好了,本篇笔记就到写这。欢迎大家到评论区一起讨论!


注:本章内容参考书

《C++程序设计教程》---- 钱能 著