// Member function as friend #include class Vector3; class Matrix3x3 { private: double A[3][3]; friend ostream & operator<< (ostream & output, Matrix3x3 & m); friend int main(int argc, char *argv[]); public: Vector3 operator* ( Vector3 & v); }; class Vector3 { private: double d[3]; friend Vector3 Matrix3x3::operator* ( Vector3 & v ); friend ostream & operator<< (ostream & output, Vector3 & v); friend int main(int argc, char *argv[]); }; /* --------------------------------------- Implementation --------------------------------------- */ Vector3 Matrix3x3::operator* ( Vector3 & v) { Vector3 out; int i, k; for (i = 0; i < 3; i = i + 1) { out.d[i] = 0.0; for (k = 0; k < 3; k = k + 1) out.d[i] = out.d[i] + A[i][k] * v.d[k]; } return(out); }; ostream & operator<< (ostream & output, Vector3 & v) { int i, j; for (i = 0; i < 3; i = i+1) { output << v.d[i] << " "; } output << endl; return(output); } ostream & operator<< (ostream & output, Matrix3x3 & m) { int i, j; for (i = 0; i < 3; i = i+1) { for (j = 0; j < 3; j = j+1) output << m.A[i][j] << " "; output << endl; } return(output); } int main(int argc, char *argv[]) { Matrix3x3 A; Vector3 v, u; A.A[0][0] = 1.0; A.A[0][1] = 0.0; A.A[0][2] = 0.0; A.A[1][0] = 1.0; A.A[1][1] = 1.0; A.A[1][2] = 0.0; A.A[2][0] = 1.0; A.A[2][1] = 1.0; A.A[2][2] = 1.0; cout << "Initial matrix A:" << endl << endl; cout << A << endl;; v.d[0] = 1.0; v.d[1] = 2.0; v.d[2] = 3.0; cout << "Initial vector v:" << endl << endl; cout << v << endl;; u = A * v; cout << endl << "After u = A * v, vector u:" << endl << endl; cout << u << endl;; }