C++重载数组运算符
C++ overloading array operator
我正在创建一个堆,如下所示:
struct Heap {
int H[100];
int operator [] (int i) { return H[i]; }
//...
};
当我尝试从中打印元素时,我确实喜欢这样:
Heap h;
// add some elements...
printf("%dn", h[3]); // instead of h.H[3]
如果,而不是访问,我想设置它们,像这样:
for (int i = 0; i < 10; i++) h[i] = i;
我该怎么办?
通常为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;
同时仍然允许您访问CCD_ 8对象。
Heap const h2 = h1;
int val = h2[0];
您可以返回对应该设置的内容的引用。将&
添加到返回类型中。
int& operator [] (int i){return H[i];}
您应该通过引用返回。使用当前版本,您将获取一个副本并编辑此副本,这不会影响原始数组。您必须将操作员过载更改为:
int& operator [] (int i){return H[i];}
相关文章:
- 运算符重载 (+),用于添加两个具有 C++ 的数组
- 你能在C++的数组 i,e(+、-、*、/) 中存储算术运算符吗?
- 如何增加以前由新运算符分配的 C++ std::list 数组的大小?
- 为什么数组大小信息可用于"sizeof"运算符和 delete[] 运算符,但在将数组作为参数传递到
- 如何重载下标运算符 [] 以引用 2d STL 数组?
- 动态数组的 C++ 重载加运算符
- 字符串数组上的 sizeof 运算符以 C++ 为单位给出不同的输出
- 为什么我在声明对象数组时不能使用 -> 运算符?
- C++函数,它将数组、谓词和运算符作为参数,并将运算符应用于满足谓词的数组元素
- 为什么重载运算符"="动态数组的类上无法正常工作?C++
- 如何将数组的重载运算符 [] 更改为 ()?
- 如何重载逗号运算符以将值分配给数组
- 如何在C++中使用 new 运算符创建对动态创建的数组的引用?
- c++ 使用动态分配运算符反向数组元素
- 重载运算符 [] 用于从对象数组中给出特定索引
- 使用新运算符C++创建多维数组的简单方法
- 重载运算符后打印二维数组<<
- C++ 中动态数组的赋值运算符
- SFINAE - 检测类型 T 是指针、数组还是带有随机访问运算符的容器,以及给定的值类型
- 试图引用已删除函数数组的相等运算符