C++ 矩阵乘法
//构造矩阵类,重载乘法操作符 //作者:nuaazdh //时间:2011年12月1日 #include <iostream> using namespace std; //Matrix矩阵类 class Matrix { public: Matrix(int mm, int nn)//构造函数 { m=mm; n=nn; int i,j; data=new double*[mm]; for(i=0;i<mm;i++) data[i]=new double[nn]; for(i=0;i<m;i++)//矩阵全部元素清零 for(j=0;j<n;j++) data[i][j]=0.0; } //构造M行N列的矩阵 Matrix(const Matrix &src) //拷贝构造函数 { m=src.m; n=src.n; int i,j; data=new double*[m];//动态建立二维数组 for(i=0;i<m;i++) data[i]=new double[n]; for(i=0;i<m;i++)//动态数组赋值 for(j=0;j<n;j++) data[i][j]=src.data[i][j]; } ~Matrix()//析构函数 { for(int i=0;i<m;i++) delete []data[i]; delete []data; } Matrix& operator=(const Matrix &src);//重载"="运算符 Matrix operator * (const Matrix &m2); //矩阵乘法 void display(); void input(); private: double **data; int m,n;//矩阵的行数,列数 };//类定义结束 Matrix& Matrix::operator=(const Matrix &src) //重载"="运算符 { int i,j; for(i=0;i<m;i++) delete []data[i]; delete []data; m=src.m;n=src.n; data=new double*[m];//动态建立二维数组 for(i=0;i<m;i++) data[i]=new double[n]; for(i=0;i<m;i++) for(j=0;j<n;j++) data[i][j]=src.data[i][j]; return *this; } //矩阵*运算符重载 Matrix Matrix::operator *(const Matrix &m2)//矩阵乘法的实现 { Matrix m3(this->m,m2.n); if(this->n!=m2.m) { cout<<"两矩阵无法进行乘法运算.\n"<<endl; exit(0); } int i,j,k,l; for(i=0;i<this->m;i++) for(j=0;j<m2.n;j++) { for(k=0;k<this->n;k++) { m3.data[i][j]+=this->data[i][k]*m2.data[k][j]; } } return m3; } //输入矩阵元素 void Matrix::input() { for(int i=0;i<m;i++) for(int j=0;j<n;j++) cin>>data[i][j]; } //显示矩阵元素 void Matrix::display() { int i,j; for(i=0;i<m;i++) { for(j=0;j<n;j++) { cout<<data[i][j]<<" "; } cout<<endl; } } //主函数 int main(int argc, char* argv[]) { int x,y; cout<<"矩阵1行数:"; cin>>x; cout<<"矩阵1列数:"; cin>>y; Matrix A(x,y); cout<<"请输入矩阵1元素(按行,共"<<x*y<<" 个)"<<endl; A.input(); cout<<"矩阵1:"<<endl; A.display(); cout<<"矩阵2行数:"; cin>>x; cout<<"矩阵2列数:"; cin>>y; Matrix B(x,y); cout<<"请输入矩阵2元素(按行,共"<<x*y<<" 个)"<<endl; B.input(); cout<<"矩阵2:"<<endl; B.display(); Matrix C=A*B; cout<<"矩阵1 与 矩阵2 的乘积:"<<endl; C.display(); return 0; }
执行结果: