C++ 重载数组运算符

C++ overloading array operator

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

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;

我该怎么办?

您可以return参考应设置的内容。将 & 添加到 return 类型。

int& operator [] (int i){return H[i];}

您应该 return 作为参考。使用您当前的版本,您正在复制并编辑此副本,这不会影响原始阵列。您必须将运算符重载更改为:

int& operator [] (int i){return H[i];}

提供几个 operator[] 函数的重载是惯用的——一个用于 const 对象,一个用于非 const 对象。 const 成员函数的 return 类型可以是 const& 或只是一个值,具体取决于被 returned 的对象,而非 return 类型的成员函数-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];