C ++过载操作符[] [](C++ overload operator [ ][ ])

2019-08-19 00:49发布

我有类CMATRIX,其中是“双指针”值的数组。

class CMatrix {
public:
    int rows, cols;
    int **arr;
};

我只需要键入访问矩阵的值:

CMatrix x;
x[0][0] = 23;

我知道如何在使用要做到:

x(0,0) = 23;

但我真的需要做的是另一种方式。 任何人都可以帮我吗? 请?

谢谢你们在我到底做了这样的帮助...

class CMatrix {
public:
   int rows, cols;
   int **arr;

public:
   int const* operator[]( int const y ) const
   {
      return &arr[0][y];
   }

   int* operator[]( int const y )
   {
      return &arr[0][y];
   }

   ....

谢谢你的帮助,我真的很感激!

Answer 1:

你不能重载operator [][]但这里的习惯用法是使用代理类 ,即超载operator []返回不同的类,它有一个实例operator []重载。 例如:

class CMatrix {
public:
    class CRow {
        friend class CMatrix;
    public:
        int& operator[](int col)
        {
            return parent.arr[row][col];
        }
    private:
        CRow(CMatrix &parent_, int row_) : 
            parent(parent_),
            row(row_)
        {}

        CMatrix& parent;
        int row;
    };

    CRow operator[](int row)
    {
        return CRow(*this, row);
    }
private:
    int rows, cols;
    int **arr;
};


Answer 2:

没有operator[][]在C ++中。 但是,你可以重载operator[]返回另一个结构,并在超负荷operator[]也得到你想要的效果。



Answer 3:

你可以通过重载做到这一点operator[]返回一个int* ,然后由第二应用索引[] 而不是int*您也可以返回表示行,其另一个类operator[]可以访问该行的各个元素。

从本质上讲,运营商的后续应用上的[]以前的应用程序的结果工作。



Answer 4:

如果您在使用标准库的容器创建一个矩阵,这是微不足道的:

class Matrix {
    vector<vector<int>> data;

public:
    vector<int>& operator[] (size_t i) { return data[i]; }
};


Answer 5:

你可以operator[]并使其返回一个指针到相应的row or column的矩阵。 因为由[]指针支持的下标,由“双方的访问notation [][]是可能的即可。



文章来源: C++ overload operator [ ][ ]