重构-C++实现矩阵的简单实例
#include#include using namespace std; double cofactor(double* detPtr,int rank,int t); //代数余子式 double valDet( double *detPtr, int rank); //行列式 template void exchange(T& t1,T& t2){T temp;temp=t1;t1=t2;t2=temp;} //交换 class SquareMatrix; class Matrix{ public: friend class SquareMatrix; //配合转换函数食用 Matrix(){m=n=mn=0;} //默认构造函数 Matrix(int mt,int nt); //构造矩阵 Matrix(const Matrix& mtrx); //复制构造函数 Matrix(int mt,int nt,double* a); //数组初始化矩阵 Matrix transposeMtrx(); //转置矩阵 //初等变换 void exchangeRow(int r1,int r2,int c=0); //交换行 void multiRow(int r,int k,int c=0); //数乘行 void addMultiRow(int r1,int r2,int k=1,int c=0); //r1+=k*r2 void exchangeColumn(int c1,int c2,int r=0); //交换列 void multiColumn(int c,int k,int r=0); //数乘列 void addMultiColumn(int c1,int c2,int k=1,int r=0); //c1+=k*c2 Matrix& operator =(const Matrix& mtrx); //赋值构造函数 friend istream& operator>>(istream& input,Matrix& mtrx); friend ostream& operator<<(ostream& output,Matrix& mtrx); //输出矩阵 friend Matrix operator*(Matrix& m1,Matrix& m2); //矩阵乘法 protected: int m; int n; int mn; double* matrixPtr; }; class SquareMatrix:public Matrix{ public: SquareMatrix():Matrix(){} //默认构造函数 SquareMatrix(int mt):Matrix(mt,mt){}; //构造函数 SquareMatrix(int mt,double* a):Matrix(mt,mt,a){}; //数组初始化方阵 SquareMatrix(const Matrix& mtrx); //矩阵到方阵转换 SquareMatrix transposeSqrMtrx(); //转置方阵 SquareMatrix adjugateSqrMatrix(); //伴随矩阵 SquareMatrix inverseSqrMatrix(); //逆矩阵 friend istream& operator>>(istream& input,SquareMatrix& mtrx); //输入方阵 friend SquareMatrix operator *(SquareMatrix& sm1,SquareMatrix& sm2); //方阵乘法 double getDet(); //行列式的值 private: }; Matrix::Matrix(int mt,int nt){ //初始化m*n矩阵 m=mt;n=nt;mn=m*n; matrixPtr=new double[mn]; } Matrix::Matrix(const Matrix& mtrx){ //复制构造函数 m=mtrx.m;n=mtrx.n;mn=mtrx.mn; matrixPtr=new double[mn]; for(int i=0;i >(istream& input,Matrix& mtrx){ //重载>> if(!mtrx.m){ cout<<"enter the m,n of matrix:"; input>>mtrx.m>>mtrx.n; mtrx.mn=mtrx.m*mtrx.n; mtrx.matrixPtr=new double[mtrx.mn]; cout<<"enter the matrix:"< >mtrx.matrixPtr[i]; return input; } Matrix Matrix::transposeMtrx(){ //转置矩阵 Matrix mtrx(n,m); for(int i=0;i >(istream& input,SquareMatrix& mtrx){ //重载>> if(!mtrx.m){ cout<<"enter the m of squareMatrix:"; input>>mtrx.m; mtrx.n=mtrx.m;mtrx.mn=mtrx.m*mtrx.n; mtrx.matrixPtr=new double[mtrx.mn]; cout<<"enter the squareMatrix:"< >mtrx.matrixPtr[i]; return input; } SquareMatrix SquareMatrix::transposeSqrMtrx(){ //转置方阵 return SquareMatrix((*this).transposeMtrx()); } SquareMatrix SquareMatrix::adjugateSqrMatrix(){ //伴随矩阵 SquareMatrix aSM(m); for(int i=0;i =(t/rank)*rank&&i<(t/rank)*rank+rank||!((t-i)%rank)); //如果i和t同行或同列 else{ nextDetPtr[j]=detPtr[i]; j++; } return valDet(nextDetPtr,rank-1)*pow(-1.0,t/rank+t%rank); } int main(){ cout< >m1;cout< >sm1;cout< >m2;cout< >sm2;cout<
以上这篇重构-C++实现矩阵的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。