matrix class... addition in particular

below is my code so far for a program that dynamically declares a matrix (2-d array). What i am having trouble with is overloading the "+" operator to add 2 matricies. below i can call matrix b but how do i call matrix A into the function?? the code below some how gives me a result that second column is increased by one.

any help much appreciated

#include <iostream>
using namespace std;
class matrix{
public:
matrix();
matrix(int m,int n);
int getRow();
int getCol();
double& operator()(int, int);
friend ostream& operator<<(ostream& os, matrix& m);
matrix operator + (matrix&);
private:
void init(int, int);
int nrows,ncols;
double *data;
};

matrix::matrix(){
init(1,1);
}

matrix::matrix(int m, int n){
init(m,n);
}

void matrix::init(int m, int n){
nrows=m;
ncols=n;
data= new double[m*n];
for(int i=0; i<m*n; i++)
data[i]=0;
}

int matrix::getRow() { return nrows;}

int matrix::getCol() { return ncols;}

double& matrix::operator ()(int r, int c){
if (r <0 || r> nrows){
cout<<"Illegal row index";
return data[0];
}
else if (c <0 || c > ncols){
cout<<"Illegal Column Index:";
return data[0];
}
else return data[r*ncols+c];
}

ostream& operator<<(ostream& os, matrix &m){
int mval=m.getRow();
int nval=m.getCol();
for(int i=0; i<mval; i++){
for(int j=0; j < nval; j++)
os<<m(i,j);
os<<endl;
}
return os;
}

matrix matrix::operator+(matrix b,matrix& a){
matrix sum(nrows, ncols);
for (int i=0; i<nrows; i++)
for(int j=0; j<ncols; j++)
sum(i,j) = (i,j) + a(i,j);
return sum;
}
void main(){
matrix a(2,2);
a(1,1)=5.0;
a(0,0)=6.0;
a(0,1)=7.0;
a(1,0)=8.0;
cout<<a(0,0)<<endl;
cout<<a(1,1)<<endl;
cout<<a<<endl;

matrix b(2,2);
b(0,0) = 5.0;
b(0,1) = 5.0;
b(1,0) = 5.0;
b(1,1) = 5.0;
cout<<b<<endl;

matrix c;
c=a+b;
cout<<c<<endl;

}
When you declare an operator in the class body, it would have only one argument as the other is taken by the this pointer.
You can declare the + operator outside the class or use it just with one argument.
if i were to use only one argument, how do i call two matricies into the function???
1
2
3
4
matrix matrix::operator+(matrix &b)
{
   //Use *this as 1st matrix
}
Topic archived. No new replies allowed.