#include <iostream.h>
class Matrix
{
private:
int rows,columns;
public:
int **pMatrix;
Matrix( int rows,int columns);
Matrix(Matrix& );
~Matrix();
int GetRows();
int GetColumns();
void SetValue();
void Mul(Matrix a,Matrix b);
void Mul(Matrix *pa,Matrix *pb);
void Mul(Matrix &a,Matrix &b);
};
int Matrix::GetRows(){return rows;};
int Matrix::GetColumns(){return columns;};
//构造函数
Matrix::Matrix(int x,int y)
{
rows=x;
columns=y;
pMatrix=new int* [x];
for(int i=0; i<x; i++)
pMatrix[i]=new int [y];
}
//析构函数
Matrix::~Matrix()
{
for(int i=0;i<rows;i++)
delete[] pMatrix[i];
delete[] pMatrix;
}
//赋值函数
void Matrix::SetValue()
{
int i,j,value;
for( i=0; i<rows; i++)
{
for( j=0; j<columns; j++)
{
cout<<"第"<<i<<"行";
cout<<"第"<<j<<"列:";
cin>>value;
cout<<endl;
pMatrix[i][j]=value;
}
}
}
//拷贝构造函数
Matrix::Matrix(Matrix& M)
{
for(int i=0; i<M.rows; i++)
for(int j=0; j<M.columns; j++)
pMatrix[i][j]=M.pMatrix[i][j]; ///这样对么?
}
void Matrix::Mul(Matrix a,Matrix b)
{
Matrix c(a.GetRows(),b.GetColumns());
for(int i=0;i<a.GetRows();i++){
for(int y=0;y<b.GetColumns();y++){
if (a.GetColumns()==b.GetRows())
for(int j=0,x=0;j<a.GetColumns(),x<b.GetRows ();j++,x++)
c.pMatrix[i][y] +=a.pMatrix[i][j]*b.pMatrix[x][y]; //这样对么?
else break;
}
}
}
//主函数
void main()
{
Matrix Ma(3,2),Mb(2,2);
Ma.SetValue();
Mb.SetValue();
for(int i;i<Ma.GetRows();i++)
for(int j;j<Ma.GetColumns();j++)
cout<<Ma.pMatrix[i][j];
Matrix Mc(3,2);
Mc.Mul(Ma,Mb);
}