C++ [] 运算符重载

#include <iostream>
#include <vector>
#include <list>
using namespace std;

// 数组类
class DataInt
{
public:
	explicit DataInt() :pData(0), capacity(0), sizeCount(0)
	{

	}

	DataInt(int _capacity) :capacity(_capacity), sizeCount(0)
	{
		pData = new int[capacity];
	}

	// 显式声明拷贝构造函数
	explicit DataInt(const DataInt &di)
	{
		capacity = di.capacity;
		sizeCount = di.sizeCount;
		pData = new int[capacity];
		for (int i = 0; i < di.sizeCount; i++)
		{
			pData[i] = di.pData[i];
		}
	}

	// 析构函数
	~DataInt()
	{
		release();
	}

	DataInt& operator=(DataInt & di)
	{
		capacity = di.capacity;
		sizeCount = di.sizeCount;
		pData = new int[capacity];

		for (int i = 0; i < di.sizeCount; i++)
		{
			pData[i] = di.pData[i];
		}

		return *this;
	}

	void PushBack(int n)
	{
		pData[sizeCount++] = n;
	}

	void ShowAll()
	{
		int i = 0;
		while (i<sizeCount)
		{
			cout << pData[i++] << endl;
		}
	}
	
	int & operator[](int idx)
	{
		return pData[idx];
	}

private:
	void release()
	{
		delete [] pData;
		capacity = 0;
	}
private:
	int * pData;			// 指向数据
	int capacity;			// 开始固定容量
	int sizeCount;			// 当前已经存在数量
};

int main()
{
	DataInt d(10);
	d.PushBack(66);
	d.PushBack(77);
	d.PushBack(88);

	d.ShowAll();
	cout << d[0] << endl;
	cout << d[1] << endl;
	cout << d[2] << endl;
	d[0] = 99999;
	d.ShowAll();
	return 0;
}


问题:operator[]重载函数int & operator[](int idx)中的&能否去掉?如果不能去掉,原因是什么?

答:不能去掉。

原因:如果去掉了,返回的值是一个临时的值,不是类内数据。一旦创建引用对象来引用返回值,则无法引用到类内数据,其实质是对一个临时值进行引用。所以无法用引用来的数据修改类内数据。此时我们编译的时候会提示错误:d[0]不是左值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值