Following is code for adding two matrix.For a 2 by 2 matrix it is giving first two value as garbage value and next two as same.

The problem is with overloaded+operator function(shaded ).Before returning if I cout the added matrix it prints fine but after returning it is not printing correctly.Even it is not returning *this correctly.

Code:`#include<iostream.h>`

#include<conio.h>

class matrix

{

private:

int *ptr,n;

public:

matrix(int num):n(num)

{ //constructor

ptr=new int[n*n];

}

void getmatrix();

void putmatrix();

matrix operator+(matrix &);

~matrix()

{ //destructor

delete[]ptr;

}

};

void matrix:: getmatrix()

{

cout<<"Enter the matrix";

for(int i=0;i<=n-1;i++)

{

for(int j=0;j<=n-1;j++)

cin>>ptr[i*n+j];

}

}

void matrix::putmatrix()

{

for(int i=0;i<=n-1;i++)

{

for(int j=0;j<=n-1;j++)

cout<<ptr[i*n+j]<<"\t";

cout<<endl;

}

}

matrix matrix::operator+(matrix &second)

{

matrix temp(n);

for(int i=0;i<=n-1;i++)

{

for(int j=0;j<=n-1;j++)

temp.ptr[i*n+j]=ptr[i*n+j]+second.ptr[i*n+j];

}

//couting temp here works fine

return(temp);//Even it does not return(*this) correctly

}

int main()

{

int m,n;

cout<<"Enter no of rows and columns";

cin>>m>>n;

if(m!=n)

cout<<"Addition not possible";

else

{

matrix m1(n),m2(n),m3(n);

m1.getmatrix();

m1.putmatrix();

m2.getmatrix();

m2.putmatrix();

m3=m1+m2;

m3.putmatrix();

}

getch();

return(0);

}