2016-02-12 36 views
0

我想讓功能運營商+類的一個朋友矩陣是否有可能使用C++中的一個類中的朋友創建一個具有多個參數的泛型函數?

我可以使用功能,因爲是但我想知道這是否可能。我嘗試了幾種方法,但都導致鏈接器錯誤,程序沒有編譯。

目前,我正在學習C++,這裏是我的代碼:

#include <iostream> 

using namespace std; 

template <int N, int M, class T> 
class Matrix { 

public: 
    T matrix[N][M]; 
    int rows; 
    int cols; 
    Matrix() { 
    rows = N; 
    cols = M; 
    for (int i = 0; i < N; i++) { 
     for (int j = 0; j < M; j++) { 
     matrix[i][j] = 0; 
     } 
    } 
    } 
    void set(int i, int j, T item) { 
    matrix[i][j] = item; 
    } 
    T operator[](int i) { 
    return matrix[i]; 
    } 
    void show() { 
    for (int i = 0; i < N; i++) { 
     for (int j = 0; j < M; j++) { 
     cout << matrix[i][j] << " "; 
     } 
     cout << endl; 
    } 
    } 
}; 

// I'm trying to declare this function as a friend. In order to keep 
// the matrix attribute private. 
template<int N, int M, class T> 
Matrix<N, M, T> & operator+(Matrix<N, M, T> &l, Matrix<N, M, T> &r) { 
    Matrix<N, M, T> * pMatrix = new Matrix<N, M, T>(); 
    for (int i = 0; i < N; i++) { 
    for (int j = 0; j < M; j++) { 
     pMatrix->matrix[i][j] = l.matrix[i][j] + r.matrix[i][j]; 
    } 
    } 
    return *pMatrix; 
} 

int main() { 
    Matrix<2, 2, int> matrix; 
    matrix.set(0, 0, 1); 
    matrix.set(0, 1, 0); 
    matrix.set(1, 0, 0); 
    matrix.set(1, 1, 1); 
    matrix.show(); 
    cout << endl; 
    matrix = matrix + matrix; 
    matrix.show(); 

} 
+0

有你在使用'new'一個原因,你的'運營商+'?它會導致內存泄漏。 –

+0

@R_Kapp你說得對。我的錯。 – Metonymy

回答

0

最簡單的就是把它定義在類中:

template <int N, int M, class T> 
class Matrix { 
    // Matrix code  

    friend Matrix operator + (const Matrix& lhs, const Matrix& rhs) { 
     // implementation 
    } 

}; 
相關問題