Complementando la respuesta de eferion.
En si, la buena práctica en general es tener las definiciones en un archivo de cabecera (.h) y las definiciones en un cpp.
De esta manera la cabecera es como una interface y tal como dice eferion no hay necesidad de recompilar todo, sino solo el cpp que modifiques. Para programas pequeños esto puede sonar absurdo, pero en sistemas de gran tamaño, la compilación puede tardar cosas de 20 minutos o mas. Imaginate que estas haciendo prueba y error.... para cada iteración tienes que esperar 20 minutos para que el código compile y corra.
Otro dato. Cuando creas tus propios archivos de cabecera y los quieres incluir no usas <>, sino "".
Reglas locas del compilador. Mas que nada para diferenciar librería estándar y librerías instaladas, de cosas propias del proyecto.
Saludos