hlavičkové soubory jsou pro interface, cpp soubory jsou pro implementaci.
Toto neplatí zdaleka vždy. Existují header-only knihovny (např. v Boostu je jich většina), které není třeba linkovat, protože veškerá implementace je v headerech.
Při programování šablon stejně implementace bude nejšíš v headeru, ale na to přijdeš sám, proč.