33,321
社区成员




#ifndef MATRIX_H
#define MATRIX_H
class Matrix
{
private:
int width;
int length;
int* pMatrix;
public:
Matrix();
Matrix(int Width,int Length);
Matrix(const Matrix &m);
~Matrix();
void Initialize();
void Display();
Matrix& operator +(const Matrix &m);
Matrix& operator -(const Matrix &m);
};
#endif
#include <iostream>
#include <cstdlib>
#include "Matrix.h"
using namespace std;
Matrix::Matrix()
{
width=length=0;
pMatrix=NULL;
}
Matrix::Matrix(int Width,int Length)
:width(Width),length(Length)
{
pMatrix=new int [width*length];
if(!pMatrix)
{
cout<<"Error!Fail to allocate space.";
abort();
}
}
Matrix::Matrix(const Matrix &m)
{
width=m.width;
length=m.length;
if(!m.pMatrix)
{
int i,j;
for(i=0;i<width;i++)
{
for(j=0;j<length;j++)
{
*(pMatrix+i*width+j)=*(m.pMatrix+i*width+j);
}
}
}
}
Matrix::~Matrix()
{
delete [] pMatrix;
pMatrix=NULL;
}
void Matrix::Initialize()
{
for(int i=0;i<width*length;i++)
{
cin>>*(pMatrix+i);
}
}
void Matrix::Display()
{
int i,j;
for(i=0;i<width;i++)
{
for(j=0;j<length;j++)
{
cout<<*(pMatrix+i*width+j)<<" ";
}
cout<<endl;
}
cout<<endl;
}
Matrix& Matrix::operator +(const Matrix &m)
{
if(width!=m.width||length!=m.length)
{
cout<<"Error!Can't run the operation."<<endl;
abort();
}
else
{
Matrix t(this->width,this->length);
int i,j;
for(i=0;i<width;i++)
{
for(j=0;j<length;j++)
{
*(t.pMatrix+i*width+j)=*(m.pMatrix+i*width+j)+*(this->pMatrix+i*width+j);
}
}
return t;
}
}
Matrix& Matrix::operator -(const Matrix &m)
{
if(width!=m.width||length!=m.length)
{
cout<<"Error!Can't run the operation."<<endl;
abort();
}
else
{
Matrix t(this->width,this->length);
int i,j;
for(i=0;i<width;i++)
{
for(j=0;j<length;j++)
{
*(t.pMatrix+i*width+j)=*(this->pMatrix+i*width+j)-*(m.pMatrix+i*width+j);
}
}
return t;
}
}
#include <cstdlib>
#include "Matrix.h"
using namespace std;
void main()
{
int p,q;
cin>>p>>q;
Matrix m1(p,q);
Matrix m2(p,q);
m1.Initialize();
m2.Initialize();
m1.Display();
m2.Display();
Matrix m3=m1+m2;
Matrix m4=m1-m2;
m3.Display();
m4.Display();
}
Matrix::Matrix(const Matrix &m)
{
width=m.width;
length=m.length;
pMatrix=new int [width*length]; // 加上这句再试试
if(!m.pMatrix)
{
int i,j;
for(i=0;i<width;i++)
{
for(j=0;j<length;j++)
{
*(pMatrix+i*width+j)=*(m.pMatrix+i*width+j);
}
}
}
}
Matrix Matrix::operator +(const Matrix &m)
{
if(width!=m.width||length!=m.length)
{
cout<<"Error!Can't run the operation."<<endl;
abort();
}
else
{
Matrix t(width,length);
int i,j;
for(i=0;i<width;i++)
{
for(j=0;j<length;j++)
{
*(t.pMatrix+i*width+j)=*(m.pMatrix+i*width+j)+*(this->pMatrix+i*width+j);
}
}
return t;
}
}
Matrix Matrix::operator -(const Matrix &m)
{
if(width!=m.width||length!=m.length)
{
cout<<"Error!Can't run the operation."<<endl;
abort();
}
else
{
Matrix t(width,length);
int i,j;
for(i=0;i<width;i++)
{
for(j=0;j<length;j++)
{
*(t.pMatrix+i*width+j)=*(this->pMatrix+i*width+j)-*(m.pMatrix+i*width+j);
}
}
return t;
}
}
Matrix& Matrix::operator -(const Matrix &m)
{
if(width!=m.width||length!=m.length)
{
cout<<"Error!Can't run the operation."<<endl;
abort();
}
else
{
Matrix t(this->width,this->length);
int i,j;
for(i=0;i<width;i++)
{
for(j=0;j<length;j++)
{
*(t.pMatrix+i*width+j)=*(this->pMatrix+i*width+j)-*(m.pMatrix+i*width+j);
}
}
return t;
}
}