求助(关于运算符重载的一个c++程序)
//我是出学者,下面程序是运算符重载//int Matrix::operator()(int i,int j);
//重载()m(k,l)表示取矩阵m中第k行,第l列元素
//friend Matrix operator+(Matrix &m1, Matrix &m2);
//重载+ 两矩阵对应元素相加
//friend Matrix operator-(Matrix &m1, Matrix &m2);
//重载- 两矩阵对应元素相减
//编译时总是友元函数出问题,希望帮助解答一下,
//非常感谢!
#include<iostream>
using namespace std;
class Matrix //矩阵类
{
private:
const int rows,cols; //矩阵的行数和列数
int * mem; //动态申请矩阵空间
public:
Matrix(int r,int c,int *m);
Matrix(Matrix &m);//拷贝构造函数
int operator()(int i,int j);
void operator=(Matrix &m);
friend Matrix operator+(Matrix &m1,Matrix &m2); //编译的时候从这行开始出错
friend Matrix operator-(Matrix &m1,Matrix &m2);
void print();
~Matrix() {delete mem;}
};
//类中的常数据成员需用构造函数的初始化表来初始化
Matrix::Matrix(int r,int c,int *m):rows(r),cols(c)
{int i;
mem=new int[r*c];
for(i=0;i<r*c;i++)
mem[i]=m[i];
}
Matrix::Matrix(Matrix &m):rows(m.rows),cols(m.cols)
{int i;
mem=new int[m.rows*m.cols];
for(i=0;i<m.rows*m.cols;i++)
mem[i]=m.mem[i];
}
int Matrix::operator()(int i,int j)
{int k;
k=(i-1)*cols+j;
return(mem[k-1]);
}
void Matrix::operator=(Matrix &m)
{int i;
mem=new int[m.rows*m.cols];
for(i=0;i<m.rows*m.cols;i++)
mem[i]=m.mem[i];
}
Matrix operator+(Matrix &m1, Matrix &m2)
{Matrix m3;
int i;
for(i=0;i<m1.rows*m1.cols;i++)
m3.mem[i]=m1.mem[i]+m2.mem[i];
return m3;
}
Matrix operator-(Matrix &m1, Matrix &m2)
{Matrix m3;
int i;
for(i=0;i<m1.rows*m2.cols;i++)
m3.mem[i]=m1.mem[i]-m2.mem[i];
return m3;
}
void Matrix::print()
{int k;
for(k=0;k<rows*cols;k++)
{ cout<<mem[k]<<" ";
if((k+1)%cols==0)
cout<<endl; //换行
}
}
int main()
{ int a[9]={2,0,0,0,2,0,0,0,2};
int b[9]={1,0,0,0,1,0,0,0,1};
Matrix mat1(3,3,a),mat2(3,3,b);
cout<<"矩阵1:"<<endl;
mat1.print();
cout<<"矩阵2:"<<endl;
mat2.print();
cout<<"矩阵1第1行第1列元素是:"<<mat1(1,1)<<endl; //取矩阵mat1的第1行第1列元素
cout<<"矩阵2第1行第2列元素是:"<<mat1(1,2)<<endl; //取矩阵mat2的第1行第2列元素
Matrix mat3=mat1+mat2;
Matrix mat4=mat1-mat2;
cout<<"矩阵1与矩阵2之和是:";
mat3.print();
cout<<"矩阵1与矩阵2之差是:";
mat4.print();
return 0;
}