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]; } .... ```