#include<iostream>
#include<cstdlib>
using namespace std;
class Matrix
{
private:
int ROW,LINE;
int **p;
public:
Matrix(int R,int L);
~Matrix()
{
delete [] p;
}
Matrix(Matrix& otherMatrix);
void Input(void);
void Print(void);
Matrix add(Matrix otherMatrix);
Matrix subtract(Matrix otherMatrix);
};
Matrix::Matrix(int R,int L)
{
ROW=R;
LINE=L;
int i;
p=new int*[R];//C++的動態二維數組是這樣申請的,先申請第壹維,再申請第二維 ,p[ROW]是壹個數組,數組中的每個元素都是整形數組
for(i=0;i<=R-1;i++)
{
p[i]=new int[L];//對壹維數組中的每壹個元素都賦於壹個數組
}
}
Matrix::Matrix(Matrix& otherMatrix)//拷貝構造函數其實之前對象的雛形框架已經是系統自動形成了,這個函數中需要申明的只是對其具體量進行賦值
{
int i,j;
ROW=otherMatrix.ROW;
LINE=otherMatrix.LINE;
int k;
p=new int*[ROW];
for(k=0;k<=ROW-1;k++)
{
p[k]=new int[LINE];
}
for(i=0;i<=ROW-1;i++)
{
for(j=0;j<=LINE-1;j++)
{
p[i][j]=otherMatrix.p[i][j];
}
}
}
void Matrix::Input(void)
{
int i,j;
cout<<"請輸入"<<ROW<<"行"<<LINE<<"列的矩陣\n";
for(i=0;i<=ROW-1;i++)
{
for(j=0;j<=LINE-1;j++)
{
cin>>p[i][j];
}
}
}
void Matrix::Print(void)
{
int i,j;
for(i=0;i<=ROW-1;i++)
{ //少壹個{
for(j=0;j<=LINE-1;j++)
{
cout<<p[i][j]<<" ";
}
cout<<"\n";
}
}
Matrix Matrix::add(Matrix otherMatrix)
{
int i,j;
Matrix C(ROW,LINE);
for(i=0;i<=ROW-1;i++)
{
for(j=0; j<=LINE-1;j++)
{
C.p[i][j]=p[i][j]+otherMatrix.p[i][j];
}
}
return C;
}
Matrix Matrix::subtract(Matrix otherMatrix)
{
int i,j;
Matrix C(ROW,LINE);
for(i=0;i<=ROW-1;i++)
{
for(j=0; j<=LINE-1;j++)
{
C.p[i][j]=p[i][j]-otherMatrix.p[i][j];
}
}
return C;
}
main()
{
int ROW,LINE;
cout<<"請輸入妳想做運算的兩個矩陣的行數和列數"<<endl;
cin>>ROW;
cin>>LINE;
Matrix A1(ROW,LINE);
Matrix A2(ROW,LINE);
Matrix A3(ROW,LINE);
cout<<"輸入第壹個矩陣"<<endl;
A1.Input();
cout<<"輸入第二個矩陣"<<endl;
A2.Input();
Matrix pA1(A1);
Matrix pA2(A2);//調用拷貝構造函數將A1和A2前面加上p也可以
cout<<"第壹個矩陣是"<<endl;
pA1.Print();
cout<<"第二個矩陣是"<<endl;
pA2.Print();
A3=pA1.add(pA2);
cout<<"矩陣的和是"<<endl;
A3.Print();
A3=pA1.subtract(pA2);
cout<<"矩陣的差是"<<endl;
A3.Print();
system("pause");
return 0;
}