もともとはcppに全部書くのが基本
他のcppから利用するのに宣言が必要で
いちいちその宣言をcppに書くのも大変なので
hに書いてインクルードしてる
hに定義まで書くと、インクルードしてる複数のcppでコンパイルされるので
同じものが複数できてしまうし、名前が同じということでエラーになる
ということで、定義はcpp、宣言はhが普通

それが煩わしいから、他の言語では一体化できるようにしたものが多い