C++ 重载数组运算符
Posted
技术标签:
【中文标题】C++ 重载数组运算符【英文标题】:C++ overloading array operator 【发布时间】:2016-08-30 19:08:26 【问题描述】:我正在创建一个堆,如下所示:
struct Heap
int H[100];
int operator [] (int i)return H[i];
//...
;
当我尝试从中打印元素时,我会这样做:
Heap h;
//add some elements...
printf("%d\n", h[3]); //instead of h.H[3]
我的问题是,如果不是访问我想设置它们,像这样:
for(int i = 0; i < 10; i++) h[i] = i;
我该怎么办?我不能像以前那样做...
谢谢!
【问题讨论】:
【参考方案1】:您可以返回对应该设置的内容的引用。将&
添加到返回类型。
int& operator [] (int i)return H[i];
【讨论】:
【参考方案2】:您应该通过引用返回。使用您当前的版本,您将复制并编辑此副本,这不会影响原始阵列。您必须将运算符重载更改为:
int& operator [] (int i)return H[i];
【讨论】:
【参考方案3】:提供operator[]
函数的几个重载是惯用的——一个用于const
对象,一个用于非const
对象。 const
成员函数的返回类型可以是const&
或只是一个值,具体取决于返回的对象,而非const
成员函数的返回类型通常是引用。
struct Heap
int H[100];
int operator [] (int i) const return H[i];
int& operator [] (int i) return H[i];
;
这允许您使用数组运算符修改非const
对象。
Heap h1;
h1[0] = 10;
同时仍然允许您访问 const
对象。
Heap const h2 = h1;
int val = h2[0];
【讨论】:
以上是关于C++ 重载数组运算符的主要内容,如果未能解决你的问题,请参考以下文章