Amigo, acho bem difícil alguém te explicar detalhadamente isso. Geralmente em C++ criamos o .h/.cpp quando queremos criar uma biblioteca, TAD ou CLASSE, cada conjunto desses vai englobar aquilo que for cabível ao seu próprio nome. Diria que uns 90% dos arquivos da source tem um nome correspondente ao que está relacionada, tirando as com abreviações.
Vale lembrar que os headers ficam no .h e a implementação no .cpp