[英]Overload cout operator for a dynamic array in a class
I am trying to overload the operator <<
for cout
for a dynamic array in a class. 我正在尝试为类中的动态数组的
cout
重载运算符<<
。 My class and member functions are as follows: 我的类和成员函数如下:
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;
}
I've tried to implement the << operator as follows: 我试图实现<<操作符,如下所示:
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;
} }
and call it from a function: 并从一个函数中调用它:
void test(){
Matrix mat1(3,4);
cout << mat1 << endl;
} }
but this doesn't print anything at all. 但这根本不打印任何内容。 It seems like the overload functions doesn't get any values for
C
and R
, but I might be wrong. 似乎重载函数没有获得
C
和R
任何值,但我可能错了。 Anyone got some ideas? 有人知道吗?
It is suppose to print dynamic matrices on the form 假设在表格上打印动态矩阵
a11 a12 a13 . . .
a21 a22 a23 . . .
. . . . . .
. . . . . .
. . . . . .
You need to print the contents of matrix1
. 您需要打印
matrix1
的内容。 You are creating a local empty matrix mat1
and printing its contents instead. 您正在创建本地空矩阵
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;
}
You are printing an empty mat1
, not given matrix1
. 您正在打印一个空
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;
}
我看到这个权利了吗,Matrix1是operator <<的参数,但是您要创建一个新的mat1并输出呢?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.