#include // --------------------------------------------- MatrixNxN: Dynamic size matrix class MatrixNxN { public: float *A; int N; /* ------------------------------------------ DEFAULT Constructor (assume n = 3) ------------------------------------------ */ MatrixNxN() { int i, j; cout << "Calling DEFAULT constructor" << endl << endl; A = new float[3*3]; for (i = 0; i < 3; i=i+1) for (j = 0; j < 3; j=j+1) if (i == j) A[i*3+j] = 1; else A[i*3+j] = 0; N = 3; } /* ------------------------------------------ COPY Constructor ------------------------------------------ */ MatrixNxN(MatrixNxN &x) { int i, j; cout << "Calling COPY constructor" << endl << endl; N = x.N; // N is from the class (see above) A = new float[N*N]; for (i = 0; i < N; i=i+1) for (j = 0; j < N; j=j+1) A[i*N+j] = x.A[i*N+j]; } /* ------------------------------------------ Constructor(int) ------------------------------------------ */ MatrixNxN(int n) { cout << "Calling constructor with n = " << n << endl << endl; A = new float[n*n]; N = n; } /* ------------------------------------ AddNum(x): add number to matrix ------------------------------------ */ void AddNum(float x) { int i, j; for (i = 0; i < N; i = i + 1) for (j = 0; j < N; j = j + 1) A[i*N+j] = A[i*N+j] + x; }; /* ------------------------ Print(): print matrix ------------------------ */ void Print() { int i, j; for (i = 0; i < N; i = i + 1) { for (j = 0; j < N; j = j + 1) cout << A[i*N+j] << "\t"; cout << "\n"; } cout << "\n"; }; }; // ----------------------------------------------------------------------- int main(int argc, char *argv[]) { int i, j, k, N; N = 4; MatrixNxN M(N); k = 1; for (i = 0; i < N; i = i + 1) for (j = 0; j < N; j = j + 1) { M.A[i*N+j] = k; k = k + 1; } M.Print(); MatrixNxN Q(M); Q.Print(); // ----------------------- See what happens when we change Q.A[0][0] Q.A[0] = 1234; cout << "After setting Q.A[0][0] = 1234: " << endl << endl; M.Print(); Q.Print(); }