This assignment consists of three tasks:
1. Implementing the Matrix class with the basic input/output functionality.
2. Implementing the matrix arithmetic using operator overloading.
3. Implementing Cramer’s Rule algorithm to solve systems of linear equations using the Matrix class for both two and three equations.
6.1 Task 1: Implementing the Matrix
File matrix.h contains an incomplete header of the Matrix class that you will implement for this
task. A two-dimensional dynamic array of double values is used to store the matrix data. The
dimensions of the array are stored in two member variables: rows and cols, which stand for
rows and columns, respectively.
Matrix constructor takes two unsigned int parameters, representing the number of rows and
columns in the matrix. Upon receiving the dimension parameters, the constructor must allocate
a dynamic array of the given size, and fill it with zeros. Remember to implement a destructor
to deallocate the memory when the program exits. In addition to the constructor, implement
an appropriate copy constructor, and overload the assignment operator = to enable assigning
Matrix objects to one another.
6.1.2 Data input and output
To populate a matrix object with data, we will use operator overloading. Overload the stream
insertion operator >> to read matrix data from either the keyboard or a file stream. Make sure
you can use >> to input a n x n matrix stored in a text file in the following format:
2 4 3
5 2 3
7 1 0
Overload the stream extraction operator << to output a matrix to the screen or file in the following format:
2 4 3
5 2 3
7 1 0
Every element should occupy exactly 10 character spaces on the screen. The precision (number
of decimal points) should be set to 3. Hint: use setw() and setprecision() functions of the
iomanip library. Do not add any additional empty lines: just print the data.
To access individual elements of the Matrix, overload the parenthesis operator () to take two int
parameters such that the following is possible (note that matrix indices start from 0,0):
Matrix mat(2,3); / / create a 2 x 3 matrix
mat(0,0) = 5; / / set element 0 ,0 to 5
cout << mat(0,0) << endl; / / output element 0 ,0 to screen
Overloading () is very similar to overloading the subscript operator . Note that operator ()
has to take two unsigned int input parameters.
The subscript operator  will be used to extract separate rows of a Matrix. Extracted rows
have to be independent Matrix objects of 1 x n dimension. Overload  to take one unsigned int
input parameter such that the following is possible:
Matrix mat(3,3); / / 3 x 3 matrix
Matrix matRow = mat; / / set matRow equal to the f i r s t row of mat
/ / dimension of matRow must be 1 x 3
You should also implement getter functions to return the number of rows and the number of
columns in a matrix.