C 重载数组运算符

新手上路,请多包涵

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

 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;

我能怎么做?

原文由 Daniel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 318
2 个回答

提供 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];

原文由 R Sahu 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

原文由 MikeCAT 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题