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();
}
有你在使用'new'一個原因,你的'運營商+'?它會導致內存泄漏。 –
@R_Kapp你說得對。我的錯。 – Metonymy