#include using namespace std; class Matrix { public: Matrix(int l,int w,int *n); //带形参的构造函数 Matrix(); //不带形参的构造函数 Matrix(Matrix &jz); //拷贝构造函数 void setnum(int l,int w); //输入矩阵的各元素值函数 Matrix operator+(const Matrix &jz); //运算符+重载成员函数,常引用做形参 Matrix operator-(const Matrix &jz); //运算符+重载成员函数,常引用做形参 Matrix operator*(const Matrix &jz); //运算符+重载成员函数,常引用做形参 Matrix operator=(const Matrix &jz); //运算符+重载成员函数,常引用做形参 Matrix zhuanzhi(); //矩阵的转置函数 void show(); //输出矩阵各元素和格式的函数 ~Matrix(); //析构函数 static int getflag(){return flag;} //静态成员函数 private: int *num; //矩阵各元素位置指针 int length; //矩阵行数 int width; //矩阵列数 static int flag; //静态数据成员,为0表示无操作,为1操作成功 }; int Matrix::flag=0; //静态数据成员在类外说明和初始化 Matrix::Matrix(int l,int w,int *n) //带形参的构造函数的实现 { length=l; width=w; num=new int[length*width]; //动态分配内存,创建对象数组 int *p=num; for(int i=0;i<length*width;i++) { *p++=*n++; } } Matrix::Matrix() //不带形参的构造函数的实现 { length=1; width=1; num=new int(1); } Matrix::Matrix(Matrix &jz) //拷贝构造函数的实现 { length=jz.length; width=jz.width; num=new int[length*width]; for(int i=0;i<length*width;i++) { *(num+i)=*(jz.num+i); } } void Matrix::setnum(int l,int w) //输入矩阵的各元素值函数的实现 { length=l; width=w; if(l==0||w==0) { cout<<"矩阵行列不能为0"<<endl; return ; } else { delete[]num; num=NULL; num=new int[length*width]; int *p=num; cout<<length<<"*"<<width<<"矩阵:"<<endl; for(int i=0;i<length;i++) { cout<<"请输入第"<<i+1<<"行元素:"<<endl; for(int j=0;j<width;j++) { cout<<"第"<<j+1<<"列元素:"; cin>>*(p+i*width+j); } } } } Matrix Matrix::operator +(const Matrix &jz) //运算符+重载成员函数的实现 { if(length==jz.length && width==jz.width) { flag=1; int *n=new int[length*width]; for(int i=0;i1) { delete[]n; //删除由new创建的对象,释放指针所指向的内存空间 } else { delete n; //删除由new创建的数组,释放指针所指向的内存空间 } return temp; } else //操作不成功 { Matrix temp; flag=0; return temp; } } Matrix Matrix::operator -(const Matrix &jz) //运算符-重载成员函数的实现 { if(length==jz.length && width==jz.width) { flag=1; int *n=new int[length*width]; for(int i=0;i<length*width;i++) { *(n+i)=*(num+i)-*(jz.num+i); } Matrix temp(length,width,n); if(length*width==1) { delete n; } else { delete []n; } return temp; } else { flag=0; Matrix temp; return temp; } } Matrix Matrix::operator*(const Matrix &jz) //运算符*重载成员函数的实现 { if(width==jz.length) { flag=1; int *n=new int[length*jz.width]; int i=0; int j=0; int t=0; for(i=0;i<length;i++) { for(j=0;j<jz.width;j++) { *(n+i*jz.width+j)=0; } } for(i=0;i<length;i++) { for(j=0;j<width;j++) { for(t=0;t<jz.width;t++) { *(n+i*jz.width+t)+=*(num+i*width+j)**(jz.num+j*jz.width+t); } } } Matrix temp(length,jz.width,n); if(length*jz.width==1) { delete n; } else { delete [] n; } return temp; } else { flag=0; Matrix temp; return temp; } } Matrix Matrix::operator =(const Matrix &jz) //运算符=重载成员函数的实现 { if(width*length==1) { delete num; } else { delete [] num; } flag=1; length=jz.length; width=jz.width; num=new int[jz.length*jz.width]; for(int i=0;i<length;i++) { for(int j=0;j<width;j++) { *(num+i*width+j)=*(jz.num+i*jz.width+j); } } return *this; //this指针 } Matrix Matrix::zhuanzhi() //矩阵的转置函数的实现 { flag=1; int *n=new int[length*width]; for(int i=0;i<length;i++) { for(int j=0;j<width;j++) { *(n+j*length+i)=*(num+i*width+j); } } Matrix temp(width,length,n); if(length*width==1) { delete n; } else { delete [] n; } return temp; } void Matrix::show() //输出矩阵各元素和格式的函数的实现 { if(length*width!=0) { for(int i=0;i<length*width;i++) { cout.width(5); cout<<*(num+i); if((i+1)%width==0) { cout<<endl; } } } } void getmn(int &m,int &n) //提示输入矩阵维数的函数实现,引用做形参,实现双向传递 { while(1) { cout<<"请输入矩阵维数:"<<endl; cout<<"行数:"; cin>>m; cout<<"列数:"; cin>>n; if(m>0&&n>0) { return; } } } Matrix::~Matrix() //析构函数的实现 { if(length*width==1) { delete num; } else { delete [] num; } } #include "矩阵计算器测试.h" int main() //主函数 { Matrix j1,j2,j3; int m,n,j; char selection; do { cout<<"----------------------/n"<<" *欢迎使用矩阵计算器* /n"<<"----------------------/n"<<endl; cout<<"*******Menu******/n"<<"A(矩阵的加法运算)/n"<<"S(矩阵的减法运算)/n"<<"M(矩阵的乘法运算)/n" <<"F(矩阵的赋值运算)/n"<<"T(矩阵的转置运算)/n"<<"Q(程序退出)/n"<<"Please Select one:"<<endl; cout<<"请选择.../n"<<endl; cin>>selection; switch(selection) //多重选择函数 { case 'A': { cout<<"矩阵的加法运算:"<<endl; getmn(m,n); j1.setnum(m,n); j2.setnum(m,n); j3=j1+j2; if(Matrix::getflag()==1) { cout<<"加数矩阵j1是:"<<endl; j1.show(); cout<<"被加矩阵j2是:"<<endl; j2.show(); cout<<"j1+j2的结果是:"<<endl; j3.show(); } return 0; } break; case 'S': { cout<<"矩阵的减法运算:"<<endl; getmn(m,n); j1.setnum(m,n); j2.setnum(m,n); j3=j1-j2; if(Matrix::getflag()==1) { cout<<"减数矩阵j1是:"<<endl; j1.show(); cout<<"被减矩阵j2是:"<<endl; j2.show(); cout<<"j1-j2的结果是:"<<endl; j3.show(); } return 0; } break; case 'M': { cout<<"矩阵的乘法运算:"<<endl; getmn(m,n); getmn(n,j); j1.setnum(m,n); j2.setnum(n,j); j3=j1*j2; if(Matrix::getflag()==1) { cout<<"乘数矩阵j1是:"<<endl; j1.show(); cout<<"被乘矩阵j2是:"<<endl; j2.show(); cout<<"j1*j2的结果是:"<<endl; j3.show(); } return 0; } break; case 'F': { cout<<"矩阵的赋值运算:"<<endl; getmn(m,n); j1.setnum(m,n); j3=j1; if(Matrix::getflag()==1) { cout<<"要赋值的矩阵j1是:"<<endl; j1.show(); cout<<"j1赋值后的结果是:"<<endl; j3.show(); } return 0; } break; case 'T': { cout<<"矩阵的转置运算:"<<endl; getmn(m,n); j1.setnum(m,n); j3=j1.zhuanzhi(); if(Matrix::getflag()==1) { cout<<"要求转置的矩阵j1是:"<<endl; j1.show(); cout<<"j1转置后的结果是:"<<endl; j3.show(); } return 0; } break; } } while(selection!='Q'); }
c++程序代码
最新推荐文章于 2023-01-26 22:26:19 发布