C++重载数组运算符

Dan*_*iel 9 c++ arrays heap operator-overloading

我正在创建一个堆,就像这样:

struct Heap{
    int H[100];
    int operator [] (int i){return H[i];}
    //...    
};
Run Code Online (Sandbox Code Playgroud)

当我尝试从中打印元素时,我喜欢这样:

Heap h;
//add some elements...
printf("%d\n", h[3]); //instead of h.H[3]
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果不是访问我想设置它们,如下所示:

for(int i = 0; i < 10; i++) h[i] = i;
Run Code Online (Sandbox Code Playgroud)

我能怎么做?我不能这样做我做...

谢谢!

R S*_*ahu 17

提供operator[]函数的几个重载是惯用的- 一个用于const对象,一个用于非const对象.const成员函数的返回类型可以是a const&或仅取决于返回的对象的值,而非const成员函数的返回类型通常是引用.

struct Heap{
    int H[100];
    int operator [] (int i) const {return H[i];}
    int& operator [] (int i) {return H[i];}
};
Run Code Online (Sandbox Code Playgroud)

这允许您const使用数组运算符修改非对象.

Heap h1;
h1[0] = 10;
Run Code Online (Sandbox Code Playgroud)

同时仍允许您访问const对象.

Heap const h2 = h1;
int val = h2[0];
Run Code Online (Sandbox Code Playgroud)


Mik*_*CAT 5

您可以返回对应该设置的内容的引用.添加&到返回类型.

int& operator [] (int i){return H[i];}
Run Code Online (Sandbox Code Playgroud)