持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情
1️⃣前言
今天笔记的内容是:
总结运算符的重载
运算符的重载,使得程序更加容易理解,便于我们对类的对象进行操作。
2️⃣如何理解运算符重载?
运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。
- 运算符重载是一种形式上的C++多态
- 事实上很多C++运算符都实现了重载,比如运算符
*- 当
*运算符用于地址,将得到存储在该地址中的值- 当
*运算符用于两个数字时,将得到它们的乘积- 同样的,当我们定义一个类后,创建两个类的对象
- 接着将两个对象相乘,显然编译器并不知道该如何操作
- 只有将
*号运算符重载后才能实现两个对象的相乘,这就是运算符重载
运算符重载是C++的特性之一,它使得我们能够将运算符的定义扩展到自定义的数据类型中。
运算符重载使得C++的代码更加直观且易读,简洁易懂。
3️⃣如何重载运算符?
关键字
operator
重载的格式
运算符重载的格式为:
举个例子:
我们定义一个myClass类,然后对加号运算符进行重载:
需注意的点
- 优先性与结合性不能变!
因为运算符是C++内部定义好了的,具有一定语法规则,如运算时的优先性以及结合性等。
在重载运算符时,需注意其运算顺序和优先性等不能改变!
- 操作数的个数不能变!
运算符根据操作数的不同,可分为单目运算符和双目运算符等。
在重载运算符时,必须注意,不能改变操作数的个数。
比如乘法运算符*的操作数是两个,即A*B,这是我们在重载时就不能修改*的操作数个数。
不然会导致程序报错,编译错误!
- 不能凭空创造运算符!
不能创建新的运算符,不然会导致编译出错。
例如,下面的操作是错误的:
4️⃣无法重载的运算符
几乎所有的C++运算符都可以被重载。但是,C++规定有些运算符无法进行重载!
如下所示:
- 点操作符(
.)- 域操作符(
::)- 成员间访问操作符(
.,*)- 成员指针操作符(
->,*)- 条件操作符(
? ::)
之前有写过几个小例子,链接如下:
5️⃣写在最后
好了,本篇笔记就到写这。欢迎大家到评论区一起讨论!
注:本章内容参考书
《C++程序设计教程》---- 钱能 著