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