2015-11-20 70 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; 
}