2015-11-20 69 views
-4

这段代码显示了我运行时的地址,而不是两个矩阵的乘法。通过运算符重载的矩阵乘法

matrix matrix:: operator *(matrix x) 
{ 
    matrix c(m1,n2); 
    c.m=c.n=m;   
    for(int i=0;i<m1;i++) 
    {   
     for(int j=0;j<n2;j++)   
     {    
      c.a[i][j]=0;   
      for(int k=0;k<n1;k++) 
      { 
       c.a[i][j]+=(a[i][k]*x.a[k][j]);  
      } 
     } 
    } 
    return c; 
} 
+2

此代码不输出任何。请详细说明发生了什么,并提供[mcve] – NathanOliver

+0

什么是m1和n2?我希望你打算'm'和'x.n',那么矩阵的构造函数应该设置'c.m'和'c.n',这样你就不想立即打开它们。 – JSF

+0

无论如何,你的设计效率很低。也许你不在乎做真正有效的工作。但至少要做一些小事以避免过度低效:签名应该是矩阵矩阵::运算符*(矩阵常量&x)常量 – JSF

回答

-1

对于两个矩阵,则可以使用一个部件一元运算符* =,即:

matrix & operator *= (matrix const & q) 
{ 
    // ... your code to multiply "this" by q... 

    return *this; 
} 

或非成员二进制运算符:

matrix operator * (matrix p, matrix const & q) 
{ 
    return p *= q; 
}