[C++学习]矩阵运算符重载

#include<iostream.h>
#include<iomanip.h>
class A
{
public:
 A (){p=0;};
 A (const A&);       
    A operator++(); 
 A operator+(const A &);
    A operator*(const A &);
 A& operator=(const A &);
 void gouzao(int,int);
 void copy(const A&);
    friend istream& operator>>(istream&,A&);
 friend ostream& operator<<(ostream&,A&);
    ~A(){if(p!=0) delete[] p;}
private:
 int **p,m,n,sum;
};
void A::gouzao(int x,int y)
{
  m=x;
  n=y;
  p=new int *[x];
  for(int i=0;i<x;i++)
    p[i]=new int[y];
}
A::A(const A& d)
{
   p=0;
   copy(d);
}
void A::copy(const A& d)
{
 delete [] p;
 if(d.p!=0)
 {
     gouzao(d.m,d.n);
 for(int i=0;i<d.m;i++)
   for(int j=0;j<d.n;j++)
  p[i][j]=d.p[i][j];
 }
}
A A::operator+(const A & d)   
{
 A v;
 v.gouzao(m,n);
  for(int i=0;i<m;i++)
    for(int j=0;j<n;j++)
  v.p[i][j]=p[i][j]+d.p[i][j];
 return v;
}
A A::operator++()              
{

 for(int i=0;i<m;i++)
   for(int j=0;j<n;j++)
  p[i][j]=++p[i][j];
   return *this;
}
A A::operator*(const A & d)  
{
 A v;
 v.gouzao(m,d.n);
    sum=0;
 for(int i=0;i<m;i++) 
   for(int j=0;j<d.n;j++)
    {   
         for(int k=0;k<n;k++)
    {
       sum+=p[i][k]*d.p[k][j];      
    }
          v.p[i][j]=sum;
          sum=0;
    }  
   return v; 
}
A& A::operator=(const A & d)   
{
 if(this!=&d)
      copy(d);
 return *this;
}
istream& operator>>(istream& in,A& v)          

 int a,b;
 cout<<"请输入矩阵的行列数:"<<endl;
 cin>>a>>b;
    cout<<"请输入矩阵的数据:"<<endl;
    v.gouzao(a,b); 
 for(int i=0;i<a;i++)
  for(int j=0;j<b;j++)
   in>>v.p[i][j];
 return in;
}
ostream& operator<<(ostream& out,A& v)   
{
 cout<<endl<<"输出:"<<endl;
 for(int i=0;i<v.m;i++)
 {
    for(int j=0;j<v.n;j++)
  cout<<setw(6)<<v.p[i][j];
  cout<<endl;
 }
 out<<endl;
 return out;
}
void main()                         //调试
{
   A c1,c2,c3;
   cin>>c3>>c2;
   c1=c3*c2;
   cout<<c1;
   A c4,c5,c6;
   cin>>c4>>c5;
   c6=c4+c5;
   cout<<c6;
   A c7,c8;
   cin>>c7;
   c8=++c7;
   cout<<c8;
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值