【问题标题】:C++ overloading array operatorC++ 重载数组运算符
【发布时间】:2016-08-30 19:08:26
【问题描述】:

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

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;

我该怎么办?我不能像以前那样做...

谢谢!

【问题讨论】:

    标签: c++ arrays operator-overloading heap


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您应该通过引用返回。使用您当前的版本,您将复制并编辑此副本,这不会影响原始阵列。您必须将运算符重载更改为:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-11-27
          • 2016-03-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-19
          • 1970-01-01
          相关资源
          最近更新 更多