C++ [] 运算符重载

来源:互联网 发布:淘宝新店铺怎么引流量 编辑:程序博客网 时间:2024/06/14 08:05
#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
原创粉丝点击