Home > Software engineering >  accessing operator overload functions using object pointer
accessing operator overload functions using object pointer

Time:10-12

I am implementing this class from https://isocpp.org/wiki/faq/operator-overloading

class Matrix {
public:
  Matrix(unsigned rows, unsigned cols);
  double& operator() (unsigned row, unsigned col);        // Subscript operators often come in pairs
  double  operator() (unsigned row, unsigned col) const;  // Subscript operators often come in pairs
  // ...
 ~Matrix();                              // Destructor
  Matrix(const Matrix& m);               // Copy constructor
  Matrix& operator= (const Matrix& m);   // Assignment operator
  // ...
private:
  unsigned rows_, cols_;
  double* data_;
};
inline
Matrix::Matrix(unsigned rows, unsigned cols)
  : rows_ (rows)
  , cols_ (cols)
//, data_ ← initialized below after the if...throw statement
{
  if (rows == 0 || cols == 0)
    throw BadIndex("Matrix constructor has 0 size");
  data_ = new double[rows * cols];
}
inline
Matrix::~Matrix()
{
  delete[] data_;
}
inline
double& Matrix::operator() (unsigned row, unsigned col)
{
  if (row >= rows_ || col >= cols_)
    throw BadIndex("Matrix subscript out of bounds");
  return data_[cols_*row   col];
}
inline
double Matrix::operator() (unsigned row, unsigned col) const
{
  if (row >= rows_ || col >= cols_)
    throw BadIndex("const Matrix subscript out of bounds");
  return data_[cols_*row   col];
}

In my main program I am declaring

Matrix *m = new Matrix(20,20)

Now how to access the elements ? Normally

Matrix m(20,20)

will do the job. But how to access in the other case ? I tried

*m(i,j) - didn't work
m->operator()(i,j) - didn't work

CodePudding user response:

(*m)(i,j) should do the trick. But then you might as well implement an equivalent at method so you can write m->at(i,j).

  • Related