【问题标题】:How to overload subscript operator [] to reference 2d STL array?如何重载下标运算符 [] 以引用 2d STL 数组?
【发布时间】:2020-05-06 03:36:27
【问题描述】:

我正在尝试为我的类创建一个重载运算符,我的类包含一个二维数组容器。我想按如下方式使用运算符: fooClass a; a[i][j] = 4; 我不想像 a[i, j], a(i, j) 那样使用它,也不想调用函数来输入或输出元素。有可能吗?

链接调用不起作用,因为第一个返回指向数组的指针,第二个应该返回数组中的一个元素,即浮点数。

我的班级看起来像这样:

class foo
{
    public:
    foo();
    ~foo();

    foo& operator=(const foo&rhs);
    foo& operator=(const foo&&rhs);
    foo& operator=(std::initializer_list<std::initializer_list<float>> il); 
    friend std::ostream& operator<<( std::ostream& os, const foo&rhs);
    std::array<float, 3>& operator[](const int & rhs); <<<<HERE<<<< What should it return?

    private:
    std::array<std::array<float, 3>, 3> matrix;
};


int main()
{
    foo a;
    a = {{1,2,3},{4,5,6},{7,8,9}};
    a[1][2] = 13;
    cout << a[1][2] << endl;


    return(0);
}

我的问题是,如何做到这一点,函数..... operator[](const int &amp; rhs);应该返回什么?

仅供参考,我没有直接使用数组容器,因为我正在实现其他功能,我也在做矩阵列专业。

【问题讨论】:

标签: c++ arrays stl operator-overloading


【解决方案1】:

这不行吗?

  std::array<float, 3>& operator[](const int & rhs) {
    return matrix[rhs];
  }

【讨论】:

  • 是的,它有效,但我不明白,你能解释一下吗?
  • 你有一个矩阵作为数组的数组。第一个 [] 操作由自定义运算符 [] 实现 - 它将对其中一个数组的引用返回到矩阵中。第二个[]操作由std::array::operator[]实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-21
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
  • 2015-09-14
  • 1970-01-01
相关资源
最近更新 更多