C++重载数组运算符

C++ overloading array operator

本文关键字:运算符 数组 重载 C++      更新时间:2023-10-16

我正在创建一个堆,如下所示:

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];}