C++小知识点:下标运算符[]的重载

下标运算符的重载有两种形式:
形式1:int& operator [] (int index); // 从外部可更改数组元素
形式2:const int& operator [] (int index) const; // 仅供元素的读写使用

对于形式1来说,其返回值是非const的,所以可以从外部通过下标操作符来更改数组的值,即如下语句是合法的:

Array Arr(10);//定义一个非const对象
arr[5] = 7;//更改有效;相当于arr.operator[](5)=7,调用形式1,因为返回值是非const的,故可以作为左值
int var = arr[3];//访问

对于形式2来说,有两点需要注意:
1)返回值是const的,所以从外部只能通过[]访问数组元素,但不能从外部通过[]来修改数组的值:

const  Array brr(6);brr[5] = 7;//非法;相当于brr.operator[](5)=7,调用形式2,因为此时返回值是非const的,故可以作为左值
int var = brr[3];//访问

2)const对象只能调用const成员函数。
这就是明明arr[3]和 brr[3]看起来一样但实质调用的[]重载函数不一样,所以返回值类型也不一样,从而操作结果不一样的原因!!!
扩:非const对象可以调用非const成员函数,也可以调用const成员函数。(所以为什么arr没有调用形式2呢?我也不知道)
换言之:
非const成员函数只能处理非const对象; const成员函数可以处理const对象,也可以处理非const对象。
定义形式1、形式2两种重载函数的好处是,这样可以定义元素写入,读取使用不同的方式。编译器将在读取类对象时调用const函数,而在对类对象执行写入操作时调用非const函数。因此,如果愿意,可在两个下标函数中实现不同的功能。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值