In this HackerRank Operator Overloading problem in c++ programming language, You are given a main() function that takes a set of inputs to create two matrices and prints the result of their addition. You need to write the class Matrix which has a member an of type vector<vector<int> >. You also need to write a member function to overload the operator +. The function's job will be to add two objects of Matrix-type and return the resultant Matrix.

```#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

class Matrix{

public:
vector<vector<int> > a;

Matrix & operator + (const Matrix &y) {

for (int m=0; m<y.a.size(); ++m) {
for (int n=0; n<y.a[0].size(); ++n) {
this->a[m][n] = this->a[m][n] + y.a[m][n];
}
}

return *this;
}
};

int main () {
int cases,k;
cin >> cases;
for(k=0;k<cases;k++) {
Matrix x;
Matrix y;
Matrix result;
int n,m,i,j;
cin >> n >> m;
for(i=0;i<n;i++) {
vector<int> b;
int num;
for(j=0;j<m;j++) {
cin >> num;
b.push_back(num);
}
x.a.push_back(b);
}
for(i=0;i<n;i++) {
vector<int> b;
int num;
for(j=0;j<m;j++) {
cin >> num;
b.push_back(num);
}
y.a.push_back(b);
}
result = x+y;
for(i=0;i<n;i++) {
for(j=0;j<m;j++) {
cout << result.a[i][j] << " ";
}
cout << endl;
}
}
return 0;
}
```

## Second solution

```// overloading operators example
#include <iostream>
#include <vector>
using namespace std;

class Matrix {
public:
vector<vector<int> > a;
Matrix operator + (const Matrix&);
};

Matrix Matrix::operator+ (const Matrix& param) {
Matrix temp;
int n = a.size(),i,j;
int m = a[0].size();
for(i=0;i<n;i++) {
vector<int> b;
for(j=0;j<m;j++) {
b.push_back(param.a[i][j]+a[i][j]);
}
temp.a.push_back(b);
}
return temp;
}

int main () {
int cases,k;
cin >> cases;
for(k=0;k<cases;k++) {
Matrix x;
Matrix y;
Matrix result;
int n,m,i,j;
cin >> n >> m;
for(i=0;i<n;i++) {
vector<int> b;
int num;
for(j=0;j<m;j++) {
cin >> num;
b.push_back(num);
}
x.a.push_back(b);
}
for(i=0;i<n;i++) {
vector<int> b;
int num;
for(j=0;j<m;j++) {
cin >> num;
b.push_back(num);
}
y.a.push_back(b);
}
result = x+y;
for(i=0;i<n;i++) {
for(j=0;j<m;j++) {
cout << result.a[i][j] << " ";
}
cout << "\n";
}
}
return 0;
}```