#include
using namespace std;
class JuZhen
{
private :
int Hang; //矩阵的行数
int Lie; //矩阵的列数
int **ptr; //用于动态分配矩阵空间所定义的指针
public:
JuZhen(int H=0, int L=0); //构造函数,动态分配内存存储矩阵元素
JuZhen(const JuZhen &JZ); //拷贝构造函数
~JuZhen(); //析构函数,注意释放内存
void InPut(); //输入矩阵元素
void Show(); //显示矩阵内容
JuZhen operator+(const JuZhen &JZ); //重载操作符 '+' 实现两个矩阵相加
JuZhen operator-(const JuZhen &JZ); //重载操作符 '-' 实现两个矩阵相加
JuZhen operator*(const JuZhen &JZ); //重载操作符 '*' 实现两个矩阵相乘
JuZhen& operator=(const JuZhen &JZ); //重载赋值操作符 '=' 实现矩阵之间的赋值
};
JuZhen::JuZhen(int H, int L)
{
Hang = H;
Lie = L;
ptr = new int*[Hang]; //分配Hang个int*空间
if(ptr == NULL) //判断空间分配是否成功
{
cerr<<"分配空间失败!"<<endl;
exit(EXIT_FAILURE);
}
for(int i=0; i<Hang; i++)
{
ptr[i] = new int[Lie];//让每一行的指针指向一个Lie大小的空间
if(ptr[i] == NULL)
{
cerr<<"分配空间失败!"<<endl;
exit(EXIT_FAILURE);
}
}
for(int i=0; i<Hang; i++)//将矩阵元素默认值设置为-1
for(int j=0; j<Lie; j++)
ptr[i][j] = -1;
}
JuZhen::JuZhen(const JuZhen &JZ)
{
Hang = JZ.Hang;
Lie = JZ.Lie;
ptr = new int*[Hang]; //分配Hang个int*空间
if(ptr == NULL) //判断空间分配是否成功
{
cerr<<"分配空间失败!"<<endl;
exit(EXIT_FAILURE);
}
for(int i=0; i<Hang; i++)
{
ptr[i] = new int[Lie];//让每一行的指针指向一个Lie大小的空间
if(ptr[i] == NULL)
{
cerr<<"分配空间失败!"<<endl;
exit(EXIT_FAILURE);
}
}
for(int i=0; i<Hang; i++) //复制矩阵元素
for(int j=0; j<Lie; j++)
ptr[i][j] = JZ.ptr[i][j];
}
JuZhen::~JuZhen()
{
for(int i=0; i<Hang; i++)
delete []ptr[i];
delete []ptr;
}
void JuZhen::InPut()
{
cout<<"这是一个 "<
cout
for(int i=0; i
for(int j=0; j
{
cout
cin>>ptr[i][j];
}
}
void JuZhen::Show()
{
for(int i=0; i<Hang; i++)
{
for(int j=0; j<Lie; j++)
cout<<ptr[i][j]<<' ';
cout<<endl;
}
}
JuZhen JuZhen::operator +(const JuZhen &JZ)
{
if(Hang != JZ.Hang || Lie != JZ.Lie)
{
cout<<"两个矩阵大小不一致,加法操作失败"<<endl;
return JuZhen();
}
JuZhen temp(Hang,Lie);//创建临时对象存储两矩阵的和
for(int i=0; i<Hang; i++)
for(int j=0; j<Lie; j++)
temp.ptr[i][j] = ptr[i][j] + JZ.ptr[i][j];
return temp;
}
JuZhen JuZhen::operator -(const JuZhen &JZ)
{
if(Hang != JZ.Hang || Lie != JZ.Lie)
{
cout<<"两个矩阵大小不一致,减法操作失败"<<endl;
return JuZhen();
}
JuZhen temp(Hang,Lie);//创建临时对象存储两矩阵的差
for(int i=0; i<Hang; i++)
for(int j=0; j<Lie; j++)
temp.ptr[i][j] = ptr[i][j] - JZ.ptr[i][j];
return temp;
}
JuZhen JuZhen::operator *(const JuZhen &JZ)
{
if(Lie != JZ.Hang)
{
cout<<"两个矩阵行列不匹配,乘法操作失败"<<endl;
return JuZhen();
}
JuZhen temp(Hang,JZ.Lie);//创建临时对象存储两矩阵的积
for(int i=0; i<Hang; i++)
for(int j=0; j<JZ.Lie; j++)
{
int sum = 0;
for(int k=0; k<Lie; k++)
sum += ptr[i][k] * JZ.ptr[k][j];
temp.ptr[i][j] = sum;
}
return temp;
}
JuZhen& JuZhen::operator =(const JuZhen &JZ)
{
if(this == &JZ) //防止自身赋值
return *this;
for(int i=0; i<Hang; i++)//释放原矩阵空间
delete []ptr[i];
delete []ptr;
Hang = JZ.Hang;
Lie = JZ.Lie;
ptr = new int*[Hang]; //分配Hang个int*空间
if(ptr == NULL) //判断空间分配是否成功
{
cerr<<"分配空间失败!"<<endl;
exit(EXIT_FAILURE);
}
for(int i=0; i<Hang; i++)
{
ptr[i] = new int[Lie];//让每一行的指针指向一个Lie大小的空间
if(ptr[i] == NULL)
{
cerr<<"分配空间失败!"<<endl;
exit(EXIT_FAILURE);
}
}
for(int i=0; i<Hang; i++) //复制矩阵元素
for(int j=0; j<Lie; j++)
ptr[i][j] = JZ.ptr[i][j];
return *this;
}
int min(int x,int y)
{return (x
int main()
{ int h1,l1,hl;
char key;
cout
cin>>h1>>l1;
hl=min(h1,l1);
JuZhen JZ1(h1,l1);
JuZhen JZ2(h1,l1);
JuZhen JZ3(h1,l1);
JuZhen JZ4(l1,h1);
JuZhen JZ5(hl,hl);
cout<<"--------------菜单--------------"<
cout
cin>>key;
switch (key) {
case '+':
cout<<"请为第一个矩阵输入元素:"<<endl;
JZ1.InPut();
cout<<"请为第二个矩阵输入元素:"<<endl;
JZ2.InPut();
cout<<"矩阵一:"<<endl;
JZ1.Show();
cout<<"矩阵二:"<<endl;
JZ2.Show();
cout<<"JZ1和JZ2的和是:"<<endl;
JZ3 = JZ1 + JZ2;
JZ3.Show();
break;
case '-':
cout<<"请为第一个矩阵输入元素:"<<endl;
JZ1.InPut();
cout<<"请为第二个矩阵输入元素:"<<endl;
JZ2.InPut();
cout<<"矩阵一:"<<endl;
JZ1.Show();
cout<<"矩阵二:"<<endl;
JZ2.Show();
cout<<"JZ1和JZ2的差是:"<<endl;
JZ3 = JZ1 - JZ2;
JZ3.Show();
break;
case '*':
cout<<"请为第一个矩阵输入元素:"<<endl;
JZ1.InPut();
cout<<"请为第二个矩阵输入元素:"<<endl;
JZ4.InPut();
cout<<"矩阵一:"<<endl;
JZ1.Show();
cout<<"矩阵二:"<<endl;
JZ4.Show();
cout<<"JZ1和JZ2的积是:"<<endl;
JZ5 = JZ1 * JZ4;
JZ5.Show();
break;
default:
break;
}
}