无法弄清楚发生了什么。 为什么运算符重载在此代码中不起作用?
class matrix
{
protected:
int matrix1[5][5],matrix2[5][5],resultmatrix[5][5];
int m,n,p,q,i,j,k,l;
public: matrix()
{
}
void getdata();
//double determinat;
matrix operator +(matrix);
void showmatrix();
};
void matrix::getdata()
{
cout<<"\n"<<"enter no of rows for matrix1 : "<<"\n";
cin>>m;
cout<<"\n"<<"enter no of columns for matrix1 : "<<"\n";
cin>>n;
cout<<"\n"<<"enter no of rows for matrix2 : "<<"\n";
cin>>p;
cout<<"\n"<<"enter no of columns for matrix2 : "<<"\n";
cin>>q;
if(m==p&&n==q)
{
cout<<"\n"<<"matrixes can be added"<<"\n";
}
else
{
cout<<"\n"<<"matrixes can not be added"<<"\n";
exit(0);
}
cout<<'\n'<<"please provide for matrix1: "<<"\n";
for( i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cin>>matrix1[i][j];
}
}
cout<<'\n'<<"please provide for matrix2: "<<"\n";
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
cin>>matrix2[i][j];
}
}
}
matrix matrix::operator+( matrix matrixobj)
{ 矩阵 tempmatrixobj;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
matrixobj.resultmatrix[i][j]=
tempmatrixobj.matrix1[i][j]+tempmatrixobj.matrix2[i][j];
}
}
return matrixobj;
//return tempmatrixobj;
//返回 *this;
void matrix::showmatrix()
{
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cout<<resultmatrix[i][j]<<"\t";
}
cout<<"\n";
}
}
int main()
{
matrix matrixobj1,matrixobj2;
matrix resultmatrix;
matrixobj1.getdata();
matrixobj2.getdata();
resultmatrix=matrixobj1+matrixobj2;
resultmatrix.showmatrix();
return 0;
}
代码的加法部分根本不起作用,它为每个矩阵取两次值,然后只输出一些内存地址。
输出:
输入矩阵 1 的行数:
3
输入矩阵 1 的列数:
3
输入矩阵 2 的行数:
3
输入矩阵 2 的列数:
3
矩阵可以相加
请提供矩阵1:
1 1 1
1 1 1
1 1 1
请提供矩阵2:
1 1 1
1 1 1
1 1 1
输入矩阵 1 的行数:
2
输入矩阵 1 的列数:
2
输入矩阵 2 的行数:
2
输入矩阵 2 的列数:
2
矩阵可以相加
请提供矩阵1:
1 1
1 1
请提供矩阵2:
1 1
1 1
-1717986920 -1717986920
-1717986920 -1717986920
按任意键继续 。 . .
最佳答案
加法代码
matrixobj.resultmatrix[i][j]=tempmatrixobj.matrix1[i] [j]+tempmatrixobj.matrix2[i][j];
从 tempmatrixobj
添加值,而不是从参数添加到 operator+
。
关于c++矩阵重载不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33980524/