A[4][6],B[6][4]。A*B
C[3][4],D[4][3],C*D。
我问过别人,说是用指针,小弟不才,望高手指教!!
小弟不甚感激!!!有源码更好!!!
#include<iostream.h>
#include<math.h>
class A
{
public:
 A()
 {
  int i,j,k;
  cout<<"请输入矩阵的行数和列数: ";
  cin>>go>>row;
  elem=new double *[go];
  for(i=0;i<go;i++)
     elem[i]=new double[row];
  cout<<"请输入矩阵的元素."<<endl;
  for(j=0;j<go;j++)
  {
   cout<<"请输入第"<<j+1<<"行的"<<row<<"个数:";
   for(k=0;k<row;k++)
    cin>>elem[j][k];
  } 
 }
 A(int i,int j)
 {
  go=i;row=j;
  elem=new double *[i];
  for(int k=0;k<go;k++)
   elem[k]=new double[j];
 }
 A(A &a1)
 {
  go=a1.go;
  row=a1.row;
  elem=new double *[go];
  for(int i=0;i<go;i++)
   elem[i]=new double[row];
  int k,l;
  for(k=0;k<go;k++)
   for(l=0;l<row;l++)
    elem[k][l]=a1.elem[k][l];
 }
 ~A()
 {
  for(int i=0;i<go;i++)
  {
   delete elem[i];
  }
        delete elem;
 }
 void print()
 {
  int i,j;
  for(i=0;i<go;i++)
  {
   for(j=0;j<row;j++)
    cout<<elem[i][j]<<' ';
   cout<<endl;
  }
 }
 int getgo()
 {
  return go;
 }
 int getrow()
 {
  return row;
 }
 friend A operator *(A &a1,A &a2);
 A & A::operator =(A &a1);
private:
 int go,row;
 double **elem;
};
A & A::operator =(A &a1)
{
 if(this==&a1)
  return *this;
 else
 {
     for(int i=0;i<go;i++)
  {
      delete elem[i];
  }
        delete elem;
  go=a1.go;
     row=a1.row;
     elem=new double *[go];
     for(i=0;i<go;i++)
      elem[i]=new double[row];
     int t,u;
     for(t=0;t<a1.go;t++)
  {
      for(u=0;u<a1.row;u++)
       elem[t][u]=a1.elem[t][u];
  } 
     return *this;
 }
}
A operator *(A &a1,A &a2)
{
 A a3(a1.getgo(),a2.getrow());
 int t,u,c;
 for(t=0;t<a1.go;t++)
 {
  for(u=0;u<a2.row;u++)
  {
   a3.elem[t][u]=0;
   for(c=0;c<a1.row;c++)
        a3.elem[t][u]+=a1.elem[t][c]*a2.elem[c][u];
  }
 }
 return a3;
}
void main()
{
    A a1,a2,a3(0,0);
 if(a1.getrow()==a2.getgo())
 {
     cout<<"两个矩阵的积为:"<<endl;
     a3=a1*a2;
  a3.print();
 }
 else
     cout<<"因为第一个矩阵的列不等于第二个矩阵的行,所以两矩阵无法相乘。"<<endl;
}
