//矩阵相加、相乘非运算符重载 #include<iostream> using namespace std; class Matrix{ int i,j,m; public: int **a; Matrix(int n){ m=n; **a=new int(); for(i=0;i<m;i++) for(j=0;j<m;j++){ cout<<"创建了一个"<<m<<"行"<<m<<"列"<<"的方阵,请输入每个元素的值:"; cin>>a[i][j]; } } Matrix(){} void display(){ for(i=0;i<m;i++) for(j=0;j<m;j++) if(j!=m-1) cout<<a[i][j]<<" "; else cout<<a[i][j]<<endl; } ~Matrix(){ delete(a); } }; Matrix add(Matrix a1,Matrix a2,int m){ int i,j; Matrix a4; for(i=0;i<m;i++) for(j=0;j<m;j++) a4.a[i][j]=a1.a[i][j]+a2.a[i][j]; return a4; } Matrix multi(Matrix a1,Matrix a2,int m){ int i,j,k; Matrix a3; a3.a={0}; for(i=0;i<m;i++) for(j=0;j<m;j++) for(k=0;k<m;k++) a3.a[i][j]+=a1.a[i][k]*a2.a[k][i]; return a3; } int main(){ int m,i,j; cin>>m; Matrix a1(m),a2(m),a3,a4; a3=multi(a1,a2,m); a4=add(a1,a2,m); a3.display(); a4.display(); return 0; }
时间: 2023-06-23 19:04:20 浏览: 97
矩阵操作,包括相乘、求逆、解行列式值,其中进行了运算符重载
3星 · 编辑精心推荐
这段代码的主要功能是实现矩阵的相加和相乘操作,其中定义了Matrix类,并重载了加号和乘号运算符来实现相加和相乘操作。在主函数中,首先输入矩阵的大小m,然后通过调用Matrix类的构造函数,创建两个m行m列的矩阵a1和a2。接着调用multi函数和add函数,分别实现矩阵的相乘和相加操作,并将结果存储在矩阵a3和a4中。最后调用Matrix类的display函数,将结果输出到屏幕上。
不过,这段代码存在一些问题。首先,在Matrix类的构造函数中,动态分配内存时使用的是`*a=new int;`,但a是一个二维指针,应该使用`a=new int*[m];`和`a[i]=new int[m];`来分配二维数组。其次,在multi函数中,应该使用`a3.a=new int*[m];`和`a3.a[i]=new int[m];`来分配二维数组。最后,在相乘操作中,内层的循环应该是`for(k=0;k<m;k++)`而不是`for(k=0;k<m;i++)`。
阅读全文