#include // ====================================== Data types class Matrix3x3 { public: float A[3][3]; }; class Vector3 { public: float x[3]; }; // ================================================ Matrix-matrix multiply Matrix3x3 operator*(Matrix3x3 & M1, Matrix3x3 & M2) { Matrix3x3 r; int i, j, k; for (i = 0; i < 3; i=i+1) for (j = 0; j < 3; j=j+1) r.A[i][j] = 0; for (i = 0; i < 3; i=i+1) for (j = 0; j < 3; j=j+1) for (k = 0; k < 3; k=k+1) r.A[i][j] = r.A[i][j] + M1.A[i][k]*M2.A[k][j]; return r; } // ================================================ Matrix-vector multiply Vector3 operator*(Matrix3x3 &M, Vector3 &v) { Vector3 z; int i, j; for (i = 0; i < 3; i=i+1) z.x[i] = 0; for (i = 0; i < 3; i=i+1) for (j = 0; j < 3; j=j+1) z.x[i] = z.x[i] + M.A[i][j]*v.x[j]; return z; } // ================================================ Print functions ostream & operator<<(ostream & cout, Matrix3x3 & M) { int i, j; for (i = 0; i < 3; i=i+1) { for (j = 0; j < 3; j=j+1) cout << M.A[i][j] << "\t"; cout << endl; } return(cout); } ostream & operator<<(ostream & cout, Vector3 v) { int i, j; for (i = 0; i < 3; i=i+1) cout << v.x[i] << "\t"; cout << endl; return(cout); } // ================================================ Main int main(int argc, char *argv[]) { int i, j, z; Matrix3x3 M1, M2, M3; Vector3 v1, v2; for (i = 0; i < 3; i=i+1) for (j = 0; j < 3; j=j+1) M1.A[i][j] = i + j; cout << "Matrix M1:" << M1 << endl; cout << endl; for (i = 0; i < 3; i=i+1) for (j = 0; j < 3; j=j+1) M2.A[i][j] = i + j + 1; cout << "Matrix M2:" << M2 << endl; cout << endl; for (i = 0; i < 3; i=i+1) v1.x[i] = i + 10; cout << "Vector v1:" << v1 << endl; cout << endl; // Operator * overload.... // Matrix-matrix multiply M3 = M1 * M2; cout << "M3 = M1 * M2:" << M3 << endl; cout << endl; // Matrix-vector multiply v2 = M2 * v1; cout << "v2 = M2 * v1:" << v2 << endl; cout << endl; }