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