#include #include #include using namespace std; class Matrix { public: Matrix(ifstream &is); Matrix(); ~Matrix(); Matrix *multiply(Matrix &rhs) const; void print(ostream &os) const; void clone(Matrix &src); private: static double **allocate(int nr, int nc); static void deallocate(int nr, double **data); int m_nRows; int m_nColumns; double **m_data; }; Matrix::Matrix() : m_nRows(0), m_nColumns(0), m_data(0) { } double **Matrix::allocate(int nr, int nc) { int ir; double **mat; mat = new double *[nr]; for (ir=0; ir> m_nRows >> m_nColumns; m_data = allocate(m_nRows, m_nColumns); for (ir=0; ir> m_data[ir][ic]; } void Matrix::deallocate(int nr, double **data) { int ir; for (ir=0; irm_nRows = m_nRows; c->m_nColumns = rhs.m_nColumns; c->m_data = allocate(c->m_nRows, c->m_nColumns); int ir, ic, ip; for (ir=0; irm_nRows; ir++) for (ic=0; icm_nColumns; ic++) { c->m_data[ir][ic] = 0; for (ip=0; ipm_data[ir][ic] += m_data[ir][ip] * rhs.m_data[ip][ic]; } return c; } void Matrix::print(ostream &os) const { int ir, ic; os << " # rows=" << m_nRows << " # columns=" << m_nColumns << endl; for (ir=0; irprint(cout); Matrix matD; matD.clone(*matC); cout << "The copy of matrix C is " << endl; matD.print(cout); delete matC; }