C++ overload operator [ ][ ]

c++, matrix, operator-keyword, overloading

Solution

You cannot overload `operator [][]`, but the common idiom here is to use a proxy class, i.e. overload `operator []` on your Matrix class to return an instance of a different class which then has `operator []` overloaded on it.

For example:

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;
};

Problem

I have class CMatrix, where is "double pointer" to array of values. ``` class CMatrix { public: int rows, cols; int **arr; }; ``` I simply need to access the values of matrix by typing: ``` CMatrix x; x[0][0] = 23; ``` I know how to do that using: ``` x(0,0) = 23; ``` But I really need to do that the other way. Can anyone help me with that? At the end I did it this way... ``` 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]; } .... ```

Original source