2015-08-14 49 views
2

我需要写一个Matrix类,它有一个指向双精度数组的指针。我需要以'矩阵方式'打印这些双打。我做了一个引用数组的私有'double * m'(请参见构造函数)。现在,运营商< <是一个非成员函数,我不知道如何打印出数组,其中指针指向..非成员函数需要通过指针打印出一个数组

class Matrix { 
private: 
    double * m; 
    int size; 
public: 
    Matrix(const int rows = 2, const int columns = 2); 
    Matrix(const Matrix& matrix); 
    Matrix& operator=(const Matrix& matrix); 
    double * getM() const {return m;} 
    friend const Matrix& operator *(int x, const Matrix& m); 
    friend const Matrix& operator *(const Matrix& matrix,int x); 
    friend std::ostream& operator<<(std::ostream& out, const Matrix& matrix); 

    int getSize() const {return size;} 
    void setSize(const int s){size = s;} 
    virtual ~Matrix(); 
    }; 

    Matrix::Matrix(const int rows, const int columns) { 
      size = rows * columns; 
      m = new double[size]; 
      for(int i = 0; i < size; i++){ 
      *(m+(i+1)) = i+1; 
      } 
    } 

回答

1

既然你已经宣布你operator <<一个你Matrixfriend ,运营商可以访问所有matrix的私人会员,包括小指成员mint成员size。您可以充分利用他们在执行您的运营商:

std::ostream& operator<<(std::ostream& out, const Matrix& matrix) { 
    double *a = matrix.m; 
    int s = matrix.size; 
    ... 
    // Do printing here 
} 
+0

感谢您的答案。你知道为什么我的析构函数不起作用,我总是得到错误,他喂养未分配的数据。 (m){ \t delete m; \t} } – GNIUS

+0

@GNIUS很有可能是因为你的拷贝构造函数或赋值操作符做错了某件事(或者忘了做某件事)。你可能想要用你的构造函数的代码发布一个单独的问题,以及产生错误的测试。 – dasblinkenlight