作业帮 > 综合 > 作业

c ++ 实现一个的n*n矩阵类,重载符号*以实现矩阵相乘

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/28 04:36:34
c ++ 实现一个的n*n矩阵类,重载符号*以实现矩阵相乘
实现一个的矩阵类,矩阵类的成员数据是一个n×n的整数数组,重载符号*以实现矩阵相乘(提示:注意矩阵运算操作要满足所需条件,数组申请可以使用new).
// 以下实现供参考
#include<stdlib.h>
#include<stdio.h>
class Matrix{
      private:
      int sz;
      int **data;
      public:
      Matrix(){sz=-1;}
      Matrix(int s){
         sz=s;
         data=new int*[sz];
         for(int i=0;i<sz;i++){
                 data[i]=new int[sz];
         }
      }
      Matrix(int s,const int *val){
         sz=s;
         data=new int*[sz];
         for(int i=0;i<sz;i++){
           data[i]=new int[sz];
           for(int j=0;j<sz;j++)
             data[i][j]=val[i*sz+j];
         }
      } 
           
      ~Matrix(){
          for(int i=0;i<sz;i++){
                  delete[] data[i];
          }
          if(sz>0)
                  delete[] data;
      }
      int getSize()const {return sz;}
      void setSize(int n){
           if(sz>0){
                    for(int i=0;i<sz;i++)
                      delete[] data[i];
                    delete[] data;
           } 
           data=new int*[n];
           for(int i=0;i<n;i++)
             data[i]=new int[n];
           sz=n;
      }
      int get(int i,int j)const {return data[i][j];}
      int set(int i,int j,int val){data[i][j]=val;}
      Matrix operator*(const Matrix& mx){
              int i,j,k;
              Matrix prod(sz);
              for(i=0;i<sz;i++){
                for(j=0;j<sz;j++){
                  int sum=0;
                  for(k=0;k<sz;k++){
                    sum+=data[i][k]*mx.get(k,j);
                  }
                  prod.set(i,j,sum);
                }
              }
              return prod;
      }
      Matrix& operator=(const Matrix& mx){
              sz=mx.getSize();
              for(int i=0;i<sz;i++)
              for(int j=0;j<sz;j++)
              set(i,j,mx.get(i,j));
      }
      void print()const{
           for(int i=0;i<sz;i++){
              for(int j=0;j<sz;j++){
              printf("%4d ",data[i][j]);
              }
              printf("\n");
           }
      }
};
int main(){
    const int a[]={1,2,3,4,5,6,7,8,9};
    const int b[]={3,4,5,6,7,8,9,0,1};
    Matrix  m1(3,a),m2(3,b);
    Matrix m(3);
    m=m1*m2;
    m.print();
    system("pause");
    return 0;
}