#include // ====================================== Data types class Matrix3 { public: float A[3][3]; }; class Vector3 { public: float x[3]; }; // ================================================ Matrix-matrix multiply Matrix3 operator*(Matrix3 & M1, Matrix3 & M2) { Matrix3 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*(Matrix3 &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 void PrintMatrix3(Matrix3 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; } } void PrintVector3(Vector3 v) { int i, j; for (i = 0; i < 3; i=i+1) cout << v.x[i] << "\t"; cout << endl; } // ================================================ Main int main(int argc, char *argv[]) { int i, j, z; Matrix3 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:" << endl; PrintMatrix3(M1); 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:" << endl; PrintMatrix3(M2); cout << endl; for (i = 0; i < 3; i=i+1) v1.x[i] = i + 10; cout << "Vector v1:" << endl; PrintVector3(v1); cout << endl; // Operator * overload.... // Matrix-matrix multiply M3 = M1 * M2; cout << "M3 = M1 * M2:" << endl; PrintMatrix3(M3); cout << endl; // Matrix-vector multiply v2 = M2 * v1; cout << "v2 = M2 * v1:" << endl; PrintVector3(v2); cout << endl; }