设计一个矩阵类,要求在矩阵类里重载“*”运算符,为什么运行出来是乘无法实现?哪里错了?
#include<iostream.h>#defineN3classMatrix{public:voidInput();voidDisplay();Matrixopera...
#include<iostream.h>#define N 3class Matrix{public: void Input(); void Display(); Matrix operator +(Matrix&); Matrix operator -(Matrix&); Matrix operator *(Matrix&);private: int a[N][N];};void Matrix::Input(){ for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { cin>>a[i][j]; } }}Matrix Matrix::operator+(Matrix& b){ Matrix temp; for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { temp.a[i][j]=a[i][j]+b.a[i][j]; } } return temp;}Matrix Matrix::operator-(Matrix& b){ Matrix temp; for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { temp.a[i][j]=a[i][j]-b.a[i][j]; } } return temp;}Matrix Matrix::operator *(Matrix& b){ Matrix temp; for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { for(int k=0;k<3;k++) { temp.a[i][j]=temp.a[i][j]+a[i][k]*(b.a[k][j]); } } } return temp;}void Matrix::Display(){ for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { cout <<a[i][j]<<" "; } cout<<endl; }}int main(){ Matrix m1,m2,m3,m4,m5; cout<<"请输入第一个3*3矩阵:"<<endl; m1.Input(); cout<<"请输入第二个3*3矩阵:"<<endl; m2.Input(); m3=m1+m2; m4=m1-m2; m5=m1*m2; cout <<"两矩阵相加得:"<<endl; m3.Display(); cout<<"两矩阵相减得:"<<endl; m4.Display(); cout<<"两矩阵相乘得:"<<endl; m5.Display(); return 0;}
展开
展开全部
栈变量未初始化,你定义的temp里面每个元素都是个随机值,如果希望做累加,最好把temp里的东西都设成0。
加法和减法没问题是因为你会让新的值覆盖它。
这就好像
int a;
a = 1; // a变成了1
int b;
b = b + 1; // b是一个随机值
改法嘛,可以加一个构造函数
class Matrix{
public:
Matrix();
...
};
...
Matrix::Matrix() {
for(int i=0; i<N; i++)
for(int j=0; j<N; j++)
a[i][j] = 0;
}
或者在乘法那里
Matrix temp;
memset(temp, 0, sizeof(temp)); // 似乎是需要#include <memory.h>
加法和减法没问题是因为你会让新的值覆盖它。
这就好像
int a;
a = 1; // a变成了1
int b;
b = b + 1; // b是一个随机值
改法嘛,可以加一个构造函数
class Matrix{
public:
Matrix();
...
};
...
Matrix::Matrix() {
for(int i=0; i<N; i++)
for(int j=0; j<N; j++)
a[i][j] = 0;
}
或者在乘法那里
Matrix temp;
memset(temp, 0, sizeof(temp)); // 似乎是需要#include <memory.h>
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询