Question: I understand and very much appreciate the practice of separating header (.h, .hpp) and source files (.cpp). 

However, many simple classes can be expressed entirely in the header file itself. I could define some methods within the class and others (e.g. template methods, inline methods) below the class. 

What advantage is there to creating a .cpp file when I could just declare *and* define the entire class in the header file? (Do I even need to?)

Answer: 
If you have the code in the header file, whenever the header changes, the client code that includes the header must also be recompiled. With a separate cpp file, only re-linking is needed. On large projects, the difference may be in hours.

Putting the code in the .cpp file hides it from the user, if you build a library and distribute only the header file. Sometimes this is necessary.

By having a header file, you can leave the client code unchanged and replace the library (say between debug and release, or regular and call-tracing versions). This is useful for debugging or investigating problems.

Leaving the header file aside makes for a smaller file that is easier to understand by the class user. You can hide complexity away in the .cpp file.
Compilation speed. Keeping implementation away from definition gives you flexibility of modifying small code without having to re-compile all sources which include that header. This is the way a makefile work, it detects changes in the prerequisites.