Chances are you won't have to write a DLL for a while, so I wouldn't worry about it. It's a much more advanced concept than the ones you're dealing with now.
Note that the #ifndef SOMEFILE_H type preprocessor directives are used as header include guards. So if you want more information you can look up header include guards.
I would consider getting a book if you're serious about learning C++. It's harder to cobble together a good knowledge of the language through tutorials. Accelerated C++ might be perfect for you since you have some background in programming and it will highlight the best uses of C++ (as opposed to C or Java).
Ehh, you have to be careful here. Template code, for instance, usually goes in header files because it needs to be accessible to the concrete code which uses it. I don't think anyone would argue that template code is not "code," and yet you find it in header files.
Originally Posted by tabstop
Most of the code in Boost is in header files, for instance.
The distinction between headers and modules is a little more difficult to define than that.