使用运算符重载的矩阵加法
Matrix addition using operator overloading
我制作了一个使用运算符重载进行矩阵加法的程序。我已经制作了这个程序,但它没有为矩阵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;
}
相关文章:
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- <T> 通过模板化运算符重载将 std::complex 乘以双倍
- C++20概念:需要运算符重载
- 使用赋值运算符重载从类中返回jobject
- 在运算符重载定义中使用成员函数(const错误)
- 字节到位运算符重载C++
- 为什么在运算符重载时需要参考?
- 类中 c++ 的运算符 + 重载
- 算术复合运算符重载为非成员
- 运算符重载 (+),用于添加两个具有 C++ 的数组
- 交换运算符 + 重载会导致无限递归
- 如何理解新的运算符重载?
- 向量保持复数的运算符重载
- 如何创建运算符重载?
- 链接列表运算符重载没有打印出我想要的内容
- C++:需要帮助了解运算符重载错误
- 使用模板化运算符重载 XOR 运算符失败
- 如何确保接受的C++模板类型使运算符重载?
- 运算符重载使用运算符+添加类模板