使用运算符重载的矩阵加法

Matrix addition using operator overloading

本文关键字:运算符 重载      更新时间:2023-10-16

我制作了一个使用运算符重载进行矩阵加法的程序。我已经制作了这个程序,但它没有为矩阵B输入。请查看该程序并提供帮助。在这种情况下,矩阵输入通常主要使用两个不同的对象,然后我对"+"使用运算符重载来添加2个对象成员,其中10个用于显示"<lt;'操作员过载。

#include<iostream>
using namespace std;
int s;
class matrix
{
public:
int **m1,**m;
friend matrix operator +(matrix &t,matrix &t1);
friend ostream& operator << (ostream &out,matrix &t);
};
matrix operator +(matrix &t,matrix &t1)
{
for(int x=0;x<s;x++)
{
for(int y=0;y<s;y++)
{
t.m1[x][y]+=t1.m1[x][y];
}
}
}
ostream& operator << (ostream &out,matrix &t2)
{
for(int p=0;p<s;p++)
{
for(int q=0;q<s;q++)
{
out<<t2.m[p][q]<<"  ";
}        
out<<endl;
}
}
int main()
{
cout<<"Enter the size of matrices(SQUARE MAT ONLY):: ";
cin>>s;
matrix t,t1,t2;
for(int i=0;i<s;i++)
{
for(int j=0;j<s;j++)
{
cout<<"Enter value ("<<i+1<<","<<j+1<<") for matrix A::";
cin>>t.m1[i][j];
}
}
for(int i=0;i<s;i++)
{
for(int j=0;j<s;j++)
{
cout<<"Enter value ("<<i+1<<","<<j+1<<") for matrix B::";
cin>>t1.m1[i][j];
}
}
t2=t+t1;
cout<<t2;
}

您实现的内容看起来更像+=运算符。它在适当的位置修改t,甚至不返回任何内容,尽管它有签名(打开并注意编译器的警告!)。所以这是未定义的行为。

简而言之,+运算符应该创建并返回一个新的矩阵对象。

我假设您正在为一个方形矩阵创建一个类,并希望添加两个方形矩阵。我修改了你的类表示和一些代码,并提出了以下可能的解决方案。

#include<iostream>
using namespace std;
#define s 3 //this is just an example value of s. This should generally be a defined as all caps. Eg: #define MATRIX_SIZE 3
class matrix
{
public:
int  **m;
matrix()
{
m = new int*[s];
for(int i = 0 ; i < s ; i++)
{
m[i] = new int[s];
}
}
friend matrix operator +(matrix &m1, matrix &m2);
friend ostream& operator << (ostream &os, matrix &m1);
};
matrix operator +(matrix &m1, matrix &m2)
{
matrix m3 = matrix();

for(int i = 0 ;i < s ; i++)
{
for(int j = 0 ; j < s ; j++)
m3.m[i][j] = m1.m[i][j] + m2.m[i][j];

}
return m3;
}
ostream& operator <<(ostream &os, matrix& m)
{
for(int i = 0 ; i< s ; i++)
{
for(int j = 0 ; j < s ; j++)
os << m.m[i][j] <<" ";
os << "n";
}
return os;
}
int main()
{
matrix m1 = matrix();
matrix m2 = matrix ();
for(int i = 0 ; i < s ; i++)
{
for(int j = 0 ;j < s ; j++)
{
m1.m[i][j] = i+j;
m2.m[i][j] = i+j;
}
}
matrix m3 = m1 + m2;
cout << m3;
return 0;
}