c ++ 实现一个的n*n矩阵类,重载符号*以实现矩阵相乘
发布网友
发布时间:2024-10-20 13:15
我来回答
共1个回答
热心网友
时间:2024-11-26 07:15
// 以下实现供参考
#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;
}