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

#include
#include
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    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   for(int j=0;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    for(int j=0;j  v.p[i][j]=p[i][j]+d.p[i][j];
 return v;
}
A A::operator++()              
{

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

你可能感兴趣的:(---C++学习----)