关于矩阵乘法重载的问题

来源:互联网 发布:笑傲江湖节目知乎 编辑:程序博客网 时间:2024/05/16 05:45

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

#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;
}
 

原创粉丝点击