2015-11-20 2 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

В любом случае, ваш дизайн совершенно неэффективен. Может быть, вам все равно, что нужно делать сложные вещи, необходимые для реальной эффективности. Но, по крайней мере, делайте тривиальные вещи, чтобы избежать избыточной неэффективности: подпись должна быть «матричной матрицей :: operator * (matrix const & x) const' – 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; 
} 
Смежные вопросы