c++重载运算符_C++ 运算符重载

这一篇介绍C++中非常重要的一部分知识——运算符重载

如有侵权,请联系删除,如有错误,欢迎大家指正,谢谢

运算符重载

  • 运算符重载的作用是赋予运算符自定义功能,如 ‘ + ’ 号可以实现 ‘常数+常数’ 等常规的加法运算,但是对于 ‘对象+对象’ 、‘对象+常数’ 、‘常数+对象’ 等操作在默认情况下不被允许,但是可以通过重载 ‘ + ’ 实现这些运算
  • 形式为:返回值类型 operator运算符(参数列表);
  • 参数列表中必须有一个类类型的参数(最好是引用,避免进行拷贝构造)
  • 在类内进行运算符重载,参数列表中默认左边有一个所在类类型的参数,这个也比较好理解,类中的非静态成员函数左边都默认有一个所在类类型的参数(this指针,上一篇有介绍),运算符重载是一种特殊的函数,又是在类内进行重载的,所以它也有一个所在类类型的参数(this指针)
  • 不是所有的运算符都支持重载,支持重载的运算符又分为支持类内和类外重载(有些运算符既可以在类内重载也可以在类外重载,但有些运算符只可以在类内(类外)重载)

重载规则

《C++ Primer(第5版)》中给出的可重载和不可重载运算符

d2ccea06ca73a49a61f7596d4bbcffc2.png
  • 赋值" = "、下标" [ ] "、调用"( )"和成员访问"->"运算符必须是成员
  • 复合赋值运算符(如:+= 等)一般来说应该是成员,但并非必须,这一点与赋值运算符略有不同
  • 改变对象状态的运算符或者与给定类型密切相关的运算符,如递增、递减和解引用运算符,通常应该是成员
  • 具有对称性的运算符可能转换为任一端的运算对象,例如算术、相等性、关系和位运算符等,因此它们通常应该是普通的非成员函数

一般运算符重载

#include 

特殊运算符重载

  • cout 是 class ostream 的对象,cin 是 class istream 的对象,这两个只能在类外重载,因为 << 作用在左边的 cout 上,>> 作用在左边的 cin 上,类内重载函数默认最左边有一个参数是当前类的指针,将 cout 和 cin 传入类内重载的函数会发生冲突
class 
  • 重载++(自加)、--(自减)运算符,类内重载和类外重载不允许同时存在
class 

转换函数(类型转换的重载)

  • C++ 提供了两种强制类型转换的方式,一种是 (int)a;另一种是 int(a),C 语言只提供一种 (int)a
  • 转换函数——没有显示返回类型,但是要写返回值(返回值类型就是要转换成的类型);必须定义成类的非静态成员函数,没有参数(有一个默认所在类的参数(this指针));不应该改变对象的内容,所以一般是const函数
class 

如果未特殊说明,以上测试均是在win10 vs2017 64bit编译器下进行的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值