您的位置:首页 > 其它

关于矩阵乘法重载的问题

2011-05-09 23:12 295 查看
我这里有一个程序 改了好多次 编译和链接都通过了 但是就是运行的时候出现了逻辑错误,情各位帮忙看看,我是新手,不好意思,麻烦各位了,请帮忙看看吧,我相信当你们是初学者的时候也有很多问题需要别人的帮忙,所以就互相鼓励帮忙一下吧 谢谢

#include<iostream>

using namespace std;

class MAT;

istream &operator>>(istream &in,MAT &ma);

ostream &operator<<(ostream &out,MAT &ma);

MAT operator+(MAT ma1,MAT ma2);

MAT operator-(MAT ma1,MAT ma2);

MAT operator*(MAT ma1,MAT ma2);

MAT operator*(int c,MAT ma2);

class MAT

{

int **a;

int m,n;

public:

MAT();

MAT(int x,int y);

int getm();

int getn();

friend istream &operator>>(istream &in,MAT &ma);

friend ostream &operator<<(ostream &out,MAT &ma);

friend MAT operator+(MAT ma1,MAT ma2);

friend MAT operator-(MAT ma1,MAT ma2);

friend MAT operator*(MAT ma1,MAT ma2);

friend MAT operator*(int c,MAT ma2);

virtual ~MAT();

};

#include<iostream>

using namespace std;

#include "MAT.h"

int MAT::getm()

{

return m;

}

int MAT::getn()

{

return n;

}

istream &operator>>(istream &in,MAT &ma)

{

int i,j;

for(i=0;i<ma.getm();i++)

{

for(j=0;j<ma.getn();j++)

{

in>>ma.a[i][j];

}

}

return(in);

}

ostream &operator<<(ostream &out,MAT &ma)

{

int i,j;

for(i=0;i<ma.getm();i++)

{

for(j=0;j<ma.getn();j++)

{

out<<ma.a[i][j]<<" ";

}

out<<endl;

}

return (out);

}

MAT operator+(MAT ma1,MAT ma2)

{

MAT v;

int i,j;

for(i=0;i<ma2.getm();i++)

{

for(j=0;j<ma2.getn();j++)

{

v.a[i][j]=ma1.a[i][j]+ma2.a[i][j];

}

}

return v;

}

MAT operator-(MAT ma1,MAT ma2)

{

MAT v;

int i,j;

for(i=0;i<ma2.getm();i++)

{

for(j=0;j<ma2.getn();j++)

{

v.a[i][j]=ma1.a[i][j]-ma2.a[i][j];

}

}

return v;

}

MAT operator*(MAT ma1,MAT ma2)

{

int i;

int j;

int k;

long lSum=0;

MAT matResult;

if(ma1.getn()!=ma2.getm())

{

cout<<"不能相乘的矩阵"<<endl;

return matResult;

}

else

{

for( i = 0;i<ma1.getm();i++)

{

for( j = 0;j < ma2.getn(); j++)//按照矩阵乘法的规则计算结果矩阵的i*j元素

{

for( k = 0 ;k < ma1.getn();k++)

{

lSum += ma1.a[i][k] * ma2.a[k][j];

}

matResult.a[i][j] = lSum;

lSum = 0;

}

}

return matResult;

}

}

MAT operator*(int c,MAT ma2)

{

MAT v;

int i,j;

for(i=0;i<ma2.getm();i++)

{

for(j=0;j<ma2.getn();j++)

{

v.a[i][j]=c*ma2.a[i][j];

}

}

return v;

}

MAT::MAT(int x,int y)

{

m=x;

n=y;

a=new int *[x];

for(int i=0;i<m;i++)

{

a[i]=new int[y];

}

}

MAT::MAT()

{

}

MAT::~MAT()

{

for(int i=0;i<m;i++)

delete a[i];

delete a;

}

int main()

{

MAT c;

int m,n,m1,n1;

cout<<"请输入矩阵a的行和列:"<<endl;

cin>>m>>n;

MAT a(m,n);

cout<<"请按行输入a矩阵的元素"<<endl;

cin>>a;

cout<<"请输入矩阵b的行和列:";

cin>>m1>>n1;

MAT b(m1,n1);

cout<<"请按行输入b矩阵的元素"<<endl;

cin>>b;

c=a+b;

cout<<c;

c=2*b;

cout<<c;

c=a*b;

cout<<c;

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: