2013-03-12 48 views
0

我試圖在一個類中爲動態數組重載運算符<<,爲cout。 我的類和成員函數如下:爲一個類中的動態數組重載cout操作符

class Matrix{ 
private: 
    int rows; 
    int columns; 
    double* matrix; 
public: 
    Matrix(); 
    explicit Matrix(int N); 
    Matrix(int M, int N); 
    void setValue(int M, int N, double value); 
    double getValue(int M, int N); 
    bool isValid() const; 
    int getRows(); 
    int getColumns(); 
    ~Matrix(); 
    friend ostream& operator<<(ostream &out, const Matrix&matrix1); 

};

Matrix::Matrix(){ 
    matrix = NULL; 
} 

Matrix::Matrix(int N){ 
    matrix = new double[N * N]; 
    rows = N; 
    columns = N; 

    for(int i = 0; i < N; i++){ 
     for(int j = 0; j < N; j++){ 
      if(i==j) 
       matrix[i * N + j] = 1; 
      else 
       matrix[i * N + j] = 0; 
     } 
    } 
} 

Matrix::Matrix(int M, int N){ 
    matrix = new double[M * N]; 
    rows = M; 
    columns = N; 

    for(int i = 0; i < M; i++){ 
     for(int j = 0; j < N; j++) 
      matrix[i * N + j] = 0; 
    } 
} 

Matrix::~Matrix(){ 
    delete [] matrix; 
} 

void Matrix::setValue(int M, int N, double value){ 
    matrix[M * columns + N] = value; 
} 

double Matrix::getValue(int M, int N){ 
    return matrix[M * columns + N]; 
} 

bool Matrix::isValid() const{ 
    if(matrix==NULL) 
     return false; 
    else 
     return true; 
} 

int Matrix::getRows(){ 
    return rows; 
} 

int Matrix::getColumns(){ 
    return columns; 
} 

我試圖實現< <操作如下:

ostream& operator<<(ostream &out, const Matrix&matrix1){ 
Matrix mat1; 
int C = mat1.getColumns(); 
int R = mat1.getRows(); 

for(int i = 0; i < R; i++){ 
    for(int j = 0; j < C; j++) 
     out << mat1.getValue(i,j) << "\t"; 
    out << endl; 
} 
return out; 

}

,並從一個函數調用它:

void test(){ 
Matrix mat1(3,4); 
cout << mat1 << endl; 

}

但是這根本不打印任何東西。看起來像過載函數沒有得到任何值CR,但我可能是錯的。任何人有一些想法?

這是假設的形式

a11  a12  a13 . . . 
a21  a22  a23 . . . 
.  .  .  . . . 
.  .  .  . . . 
.  .  .  . . . 
+0

「看起來重載函數沒有獲得任何C和R的值,但我可能是錯誤的」 - 您是否設置了斷點並檢查C和R的值? – chris 2013-03-12 21:37:34

+0

您仍然在創建不必要的局部變量,就像您之前對構造函數所做的一樣。 – molbdnilo 2013-03-12 21:41:04

+0

不,我沒有,但謝謝你的提示! – Ole1991 2013-03-12 21:43:35

回答

2

要打印一個空mat1,沒有給出matrix1

ostream& operator<<(ostream &out, const Matrix& matrix1) 
{ 
    //Matrix mat1; // <- Comment ythis 
    int C = matrix1.getColumns(); // <<- matrix1 
    int R = matrix1.getRows(); // <<- matrix1 

    for (int i = 0; i < R; i++) 
    { 
     for (int j = 0; j < C; j++) 
      out << matrix1.getValue(i, j) << "\t"; // <<- matrix1 
     out << endl; 
    } 
    return out; 
} 
2

您需要打印的matrix1內容上打印動態矩陣。您正在創建一個本地空矩陣mat1並改爲打印其內容。

ostream& operator<<(ostream &out, const Matrix& matrix1) 
{ 
    int C = matrix1.getColumns(); 
    int R = matrix1.getRows(); 

    for(int i = 0; i < R; i++){ 
    for(int j = 0; j < C; j++) 
     out << matrix1.getValue(i,j) << "\t"; 
    out << endl; 
    } 
    return out; 

} 
+0

當然......謝謝! – Ole1991 2013-03-12 21:41:44

2

我會看到這個權利,矩陣1是參數操作< <,但你要創建一個新的MAT1和輸出是什麼?

+0

你看到這個權利;) – 2013-03-12 21:39:06