template class Matrix { typedef E value_type; // Tdef.h ==> "E" typedef E& reference; // Tdef.h ==> "E&" // ... reference operator() (unsigned, unsigned); Matrix& operator= ( const Matrix & ); friend Matrix operator* ( const Matrix &A , const Matrix &B ); }; { // ... Matrix::value_type xxx; Matrix M; // ... M(i,j) = xxx; // M.operator() (i, j) = xxx; // FEO ==> M[i][j] } { Matrix Z, A, B, C; Z = A * B * C; // ==> Z = ( (A * B) * C ); Z.operator= ( (A * B) * C ); Z.operator= ( operator* (A,B) * C ); Z.operator= ( operator* (operator* (A,B) , C ) ); // ==> Z = ( A * (B * C) ); //... }