【问题标题】:Overload cout operator for a dynamic array in a class为类中的动态数组重载 cout 运算符
【发布时间】:2013-03-12 21:35:56
【问题描述】:

我正在尝试为类中的动态数组重载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    . . .
.        .       .     . . .
.        .       .     . . .
.        .       .     . . .

【问题讨论】:

  • “重载函数似乎没有得到 C 和 R 的任何值,但我可能错了” - 你设置断点并检查 C 和 R 的值了吗?
  • 您仍在创建不必要的局部变量,就像您之前对构造函数所做的那样。
  • 不,我没有,但感谢您的提示!

标签: c++ class matrix dynamic-arrays


【解决方案1】:

您正在打印一个空的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;
    
    }
    

    【讨论】:

      【解决方案3】:

      我没看错吗,Matrix1 是 operator

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-04
        • 2012-02-21
        相关资源
        最近更新 更多