#include // --------------------------------------------- MatrixNxN: Dynamic size matrix class MatrixNxN { public: float *A; int N; /* ------------------------------------------ Constructor(int) ------------------------------------------ */ MatrixNxN(int n) { cout << "Allocating an nxn float matrix, with n = " << n << endl << endl; A = new float[n*n]; N = n; } MatrixNxN & operator=(MatrixNxN & M) { int i, j; cout << "Calling MatrixNxN::operator=(MatrixNxN) " << endl << endl; if ( M.N != N ) { cout << "**Unequal size matrices cannot be copied..." << endl << endl; return(M); } for (i = 0; i < N; i=i+1) for (j = 0; j < N; j=j+1) A[i*N+j] = M.A[i*N+j]; return(M); } /* ------------------------ 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 N = 4; MatrixNxN M(N), Q(N); MatrixNxN R(3); int i, j, k; 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; } cout << "Matrix M:" << endl; M.Print(); cout << endl; // ----------------------- Cascade assignment of matrices... Q = R = M; cout << "After Q = R = M: " << endl << endl; cout << "Matrix R:" << endl; R.Print(); cout << endl; cout << "Matrix Q:" << endl; Q.Print(); cout << endl; }