I was looking for some advice on how to use the `this` keyword in an overloaded operator. I have tried reading up on it, but it doesn't fully make sense, maybe if someone can explain it somewhat more in depth? 

I've also provided the code where my issue is, it is meant to do the addition of two matrices. I have to stick with the `const Matrix&` argument. 
The current errors I'm getting are `no match for ‘operator[]’ (operand types are ‘const Matrix’ and ‘int’)` for the 4 lines of code that is meant to do the addition.

```
int array1[2][2] = {{5, 7}, {3, 2}}; //makes the 2 dimensional arrays used to represent the matrix 
int array2[2][2] = {{2, 3}, {1, 4}};
Matrix m2(array1);
const Matrix m3(array2);

cout << m2 << " + " << m3 << " = " << m2 + m3 << endl; //here is where the operator + comes into play. (The << operator was overloaded to work with this)
cout << m3 << " + " << m2 << " = " << m3 + m2 << endl << endl;

```

All of the above in found in the main program. Below I have added methods with belong to the .cpp and the some (the needed part) of the class definition. 

```
Matrix Matrix::operator+(const Matrix& rightOp) const
{
Matrix addedMatrix;

addedMatrix.matrix[0][0] = *this->matrix + rightOp[0][0]; //current issue stands at these for lines
addedMatrix.matrix[0][1] = *this->matrix + rightOp[0][1]; //*this is used to represent the left operand of the expression, which points to the Matrix object that called the method
addedMatrix.matrix[1][0] = *this->matrix + rightOp[1][0];
addedMatrix.matrix[1][1] = *this->matrix + rightOp[1][1];

return addedMatrix;
}

Matrix::Matrix(const int newMatrix[][2]) //constructor where m2 and m3 are passed to
{
for(int row = 0; row < 2; row++)
    for(int col = 0; col < 2; col++)
        matrix[row][col] = newMatrix[row][col];  
}

ostream& operator<<(ostream& output, const Matrix& newMatrix) //overloaded << operator
{
output << "[[" << newMatrix.matrix[0][0] << ", " << newMatrix.matrix[0][1]         << "], "
           << "[" << newMatrix.matrix[1][0] << ", " << newMatrix.matrix[1][1] << "]]";

return output;
}

class Matrix //Class Defintion for Matrix
{
public:
    Matrix();
    Matrix(const int[][2]);
    Matrix operator+(const Matrix&) const;
    friend ostream& operator<<(ostream&, const Matrix&);
private:
    int matrix[2][2];
};

```