// Cannot make this work... need friend class !!! #include // --------------------- Matrix3x3 declaration class Matrix3x3; // --------------------- Vector3 declaration class Vector3; // --------------------- Matrix3x3 definition class Matrix3x3 { private: double A[3][3]; friend Vector3 Vector3::operator* ( Matrix3x3 & M ); 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[]); Vector3 operator* ( Matrix3x3 & M ); }; // ---------------------- Implement Matrx * Vector Vector3 Vector3::operator* ( Matrix3x3 & M ) { 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] + d[k] * M.A[k][i]; } return(out); } // ---------------------- Implement Matrx * Vector 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 << v << endl;; }