#include <iostream> using namespace std; /* you can replace <class Type> with <typename Type> */ template <class Type> class matrix{ private: Type **array; int rows; int cols; public: matrix(int r, int c); matrix(matrix & m); /* copy constructor */ Type* & operator[](int row) { return array[row]; } int getRows() const { return rows; } int getCols() const { return cols; } void showArray(); }; template <class Type> matrix<Type>::matrix(int r, int c) { rows = r; cols = c; array = new Type*[r]; for(int i=0; i<r; i++) array[i] = new Type[c]; } template <class Type> matrix<Type>::matrix(matrix & m) { int i, j; delete [] array; rows = m.getRows(); cols = m.getCols(); array = new Type*[rows]; for(i=0; i<rows; i++) array[i] = new Type[cols]; for(i=0; i<rows; i++) for(j=0; j<cols; j++) array[i][j] = m[i][j]; } template <class Type> void matrix<Type>::showArray() { int i, j; for(i=0; i<rows; i++) { for(j=0; j<cols; j++) cout << array[i][j] << '\t'; cout << endl; } } int main(){ int i, j; matrix<int> b(10,5); /* 10-by-5 array */ matrix<char> d(10,5); for(i=0; i<10; i++) for(j=0; j<5; j++) b[i][j] = i+j; /* assigning values to every single cell */ cout << "Here are the contents of b:\n"; b.showArray(); /* display the array */ matrix<int> a(b); /* copy b to a */ cout << "\nHere are the contents of a:\n"; a.showArray(); for(i=0; i<10; i++) for(j=0; j<5; j++) d[i][j] = 'a'+i+j; /* assigning values to every single cell */ cout << "Here are the contents of d:\n"; d.showArray(); /* display the array */ matrix<char> c(d); /* copy d to c */ cout << "\nHere are the contents of c:\n"; c.showArray(); return 0; }Go ahead and add additional functions to this class template so that it can handle row and column additions and deletions.