#include // ====================================== Vector3 class Vector3 { private: float x[3]; public: /* -------------------- Default constructor -------------------- */ Vector3() { int i; for (i = 0; i < 3; i=i+1) x[i] = i + 10; } friend ostream & operator<<(ostream &, Vector3 &); friend class Matrix3; }; // ====================================== Matrix3 class Matrix3 { private: float A[3][3]; public: /* -------------------- Default constructor -------------------- */ Matrix3() { int i, j; for (i = 0; i < 3; i=i+1) for (j = 0; j < 3; j=j+1) A[i][j] = i + j; } /************************************************ Matrix vector multiply member FRIEND function *************************************************/ Vector3 operator*(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] + A[i][j]*v.x[j]; return z; } friend ostream & operator<<(ostream &, Matrix3 &); }; // ================================================ Print functions ostream & operator<<(ostream & cout, Vector3 & v) { int i; for (i = 0; i < 3; i=i+1) cout << v.x[i] << "\t"; cout << endl; return(cout); } ostream & operator<<(ostream & cout, 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; } return(cout); } // ================================================ Main int main(int argc, char *argv[]) { Matrix3 M; Vector3 v1, v2; cout << "Matrix M:" << endl << M << endl; cout << "Vector v1:" << endl << v1 << endl; cout << "Vector v2:" << endl << v2 << endl; // Matrix-vector multiply v2 = M * v1; cout << "After v2 = M * v1:" << endl << endl; cout << "Vector v1:" << endl << v1 << endl; cout << "Vector v2:" << endl << v2 << endl; }