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
- C++-运算符重载
- [C++]重载运算符
- C#:运算符重载
- c++-++运算符重载
- C++:重载运算符
- 运算符重载(C++)
- [c++]运算符重载
- 【C++】运算符重载
- C++--------------------------------------------运算符重载
- C#:运算符重载
- C++:运算符重载
- C++:运算符重载
- C#:运算符重载
- [C++]运算符重载
- 【c++】运算符重载
- C++:运算符重载
- C#:运算符重载
- C++:运算符重载
- #pragma pack
- Hadoop 2.7分布式部署
- 7.13 GPOJ 3579Median
- iOS开发 - Quartz2D绘制小黄人
- 这些天对图片加载框架的思考
- C++ [] 运算符重载
- volatile的理解
- 博客书写-教师节收益
- 用glew,glfw实现opengl学习笔记5课纹理(2)
- 缓存使用总结
- UEditor删除字数统计和元素路径
- 使用@Inject实例化Logger,jsr330
- HDU2066-一个人的旅行(Dijkstra算法+Floyd算法)
- nginx学习(五)——nginx的配置系统1