What reasons are there for using separate implementation and header files in C++, as opposed to a single header file as in Java? Lately I've been including the implementation in the header file ...