2014-02-22 66 views
2

這是一個具有存儲2D動態數組的對象「矩陣」的類。我需要能夠添加2個矩陣並將這些元素的總和放入結果矩陣中。 (即:c [1] [1]將等於[1] [1] + b [1] [1])。 但我要實現它的方式如下:重載'='使'+'與矩陣一起工作

Square_Matrix a,b,c; 
c = a + b; 

這裏是我的兩個重載運營商來說,「=」一期工程的罰款外「+」(所​​以A = B = C工作得很好,矩陣得到複製)。不幸的是,我沒有在我的IDE上發現錯誤,程序只是關閉並且顯示「Square_Matrix已停止工作」。我怎樣才能解決這個問題?

我也不太確定我是否正確實施了我的'+',有人說「返回*這個」不會做任何事情。

//.h file 
Square_Matrix& operator=(const Square_Matrix& Par2); 
Square_Matrix& operator+(const Square_Matrix& Par3); 

//.cpp file  
Square_Matrix& Square_Matrix::operator=(const Square_Matrix& Par2){ 
    if (size != Par2.size){ 
     cout << "Matrices are of different size" << endl; 
    } else { 
     for (int i = 0; i < size; i++){ 
      for (int j = 0; j < size; j++){ 
       matrix[i][j] = Par2.matrix[i][j]; 
      } 
     } 
    } 
} 

Square_Matrix& Square_Matrix::operator +(const Square_Matrix& Par3){ 
    Square_Matrix result; 
    result.Set_Size(Par3.size); 
    for (int i = 0; i < Par3.size; i++){ 
     for (int j = 0; j < Par3.size; j++){ 
      result.matrix[i][j] = Par3.matrix[i][j]+matrix[i][j]; 
     } 
    } 
return *this; 
} 
+2

您的'operator ='應該以'return * this;'結尾。你的'operator +'應該以'return result;'結尾,並且不應該返回一個引用。 – Brian

+0

@remyabel:從'operator +'?這不是不返回參考的原因。你不返回一個引用,因爲'operator +'應該爲該函數創建一個新的對象。如果你回覆了這個參考,這將是一個懸而未決的參考。 –

+0

另請參閱[這裏](http://stackoverflow.com/a/4421719/509868)(尋找'operator +'和'operator + ='的正確定義) – anatolyg

回答

2

Square_Matrix& Square_Matrix::operator=(const Square_Matrix& Par2)

return *this; 

結束,你Square_Matrix& Square_Matrix::operator +(const Square_Matrix& Par3)

return result; 

結束而改變

Square_Matrix& Square_Matrix::operator +(const Square_Matrix& Par3) 

Square_Matrix Square_Matrix::operator +(const Square_Matrix& Par3) 
+1

如果返回類型是引用,則運算符+不應返回「結果」。 「結果」是一個局部變量,它是UB返回一個局部變量的引用。 – PaulMcKenzie

+0

@PaulMcKenzie,你是對的。對不起,我忘了添加最後的要求。 – Avt