还有局部变量的引用问题...你可以自己改下
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
#define R 8;
#define C 8;
namespace demo{
class matrix{
private:
int rows;
int cols;
float temp[R][C];
public:
matrix(int a,int b):rows(a),cols(b)
{
}
void inputm()
{
for(int i=0;i<rows;i++)
for(int j=0;j<cols;j++)
cin>>*(*(temp+i)+j);
}
float *operator()(int r,int c)
{
return *(temp+r)+c;
}
//--------------------------------------以下是友元函数,并非这个类的公有函数--------------------------------------
friend matrix& operator+(matrix& m1,matrix& m2)
{
matrix m3(m1.rows,m1.cols);
if(m1.rows==m2.rows&&m1.cols==m2.cols)
{
for(int i=0;i<m1.rows;i++)
for(int j=0;j<m1.cols;j++)
*m3(i,j)=*m1(i,j)+*m2(i,j);
return m3;
}
else {return m1;cout<<"矩阵行列数不匹配!";}
}
friend matrix& operator-(matrix& m1,matrix& m2)
{
matrix m3(m1.rows,m1.cols);
if(m1.rows==m2.rows&&m1.cols==m2.cols)
{
for(int i=0;i<m1.rows;i++)
for(int j=0;j<m1.cols;j++)
*m3(i,j)=*m1(i,j)-*m2(i,j);
return m3;
}
else {return m1;cout<<"矩阵行列数不匹配!";}
}
friend matrix& operator*(matrix& m1,matrix& m2)
{
matrix m3(m1.rows,m1.cols);
if(m1.cols==m2.rows)
{
for(int i=0;i<m1.rows;i++)
for(int j=0;j<m2.cols;j++)
*m3(i,j)=*m1(i,j)**m2(j,i);
return m3;
}
else {return m1;cout<<"矩阵行列数不匹配!";}
}
friend
operator<<(ostream&out,matrix& m)
{
for(int i=0;i<m.rows;i++)
{
for(int j=0;j<m.cols;j++)
cout<<setw(9)<<m(i,j);
cout<<endl;
}
}
};
}
void main()
{
demo::matrix A(2,3),B(2,3),C(3,2);
A.inputm();
B.inputm();
C.inputm();
cout<<"A+B="<<A+B;
cout<<"A-B="<<A-B;
cout<<"A*B="<<A*B;
cout<<A+C;
}
[[it] 本帖最后由 sunkaidong 于 2008-5-2 12:42 编辑 [/it]]