#include #include #include class Matrix { public: Matrix(int rowSize, int colSize); Matrix(const Matrix &r); ~Matrix(); void Set(int row, int col, int val); int Get(int row, int col)const; void Disp()const; void Set(const int *pArray); Matrix & operator=(const Matrix &r); Matrix operator+(const Matrix &r)const; Matrix operator-(const Matrix &r)const; int & operator()(int RowSize, int ColSize); private: int *m_pMatrix; int m_rowSize, m_colSize; }; int &Matrix::operator()(int RowSize, int ColSize) { return m_pMatrix[m_colSize * RowSize + ColSize]; } Matrix::Matrix(int rowSize, int colSize) { m_rowSize = rowSize; m_colSize = colSize; m_pMatrix = new int[m_rowSize * m_colSize]; } Matrix::Matrix(const Matrix &r) { m_rowSize = r.m_rowSize; m_colSize = r.m_colSize; m_pMatrix = new int[m_rowSize * m_colSize]; ::memcpy(m_pMatrix, r.m_pMatrix, m_rowSize * m_colSize * sizeof(*r.m_pMatrix)); } Matrix::~Matrix() { delete [] m_pMatrix; } void Matrix::Set(int row, int col, int val) { if (row > m_rowSize - 1 || row < 0 || col > m_colSize - 1 || col < 0) { printf("Size is out of range..!\n"); exit(EXIT_FAILURE); } m_pMatrix[row * m_colSize + col] = val; } int Matrix::Get(int row, int col)const { if (row > m_rowSize - 1 || row < 0 || col > m_colSize - 1 || col < 0) { printf("Size is out of range..!\n"); exit(EXIT_FAILURE); } return m_pMatrix[row * m_colSize + col]; } void Matrix::Disp()const { for (int i = 0; i < m_rowSize; ++i) { for (int j = 0; j < m_colSize; ++j) printf("%d ", m_pMatrix[i * m_colSize + j]); printf("\n"); } } void Matrix::Set(const int *pArray) { ::memcpy(m_pMatrix, pArray, m_rowSize * m_colSize * sizeof(*pArray)); } Matrix &Matrix::operator=(const Matrix &r) { if (this == &r) return *this; delete [] m_pMatrix; m_rowSize = r.m_rowSize; m_colSize = r.m_colSize; m_pMatrix = new int[m_rowSize * m_colSize]; ::memcpy(m_pMatrix, r.m_pMatrix, m_rowSize * m_colSize * sizeof(*r.m_pMatrix)); } Matrix Matrix::operator+(const Matrix &r)const { Matrix m(2,2); m = *this; for (int i = 0; i < m_rowSize * m_colSize; ++i) m.m_pMatrix[i] = m.m_pMatrix[i] + r.m_pMatrix[i]; return m; } Matrix Matrix::operator-(const Matrix &r)const { Matrix m(2,2); m = *this; for (int i = 0; i < m_rowSize * m_colSize; ++i) m.m_pMatrix[i] = m.m_pMatrix[i] - r.m_pMatrix[i]; return m; } int main() { Matrix a(2,2), b(2,2), c(2,2); a(0, 0) = 10; a(0, 1) = 10; a(1, 0) = 20; a(1, 1) = 20; b(0, 0) = 10; b(0, 1) = 10; b(1, 0) = 20; b(1, 1) = 20; c = a + b; c.Disp(); return 0; }