Насколько дурным тоном будет реализовать весь такой класс в одном файле (в .h например)?
Их специально сделали отдельными, потому что они не компилируются, а только вставляются напрямую через include. Некоторые расчитаны на единственную вставку (тогда делаются ворота из ifndef), а некоторые - на множественную вставку (тогда и ворота из ifndef не нужны). И вот когда они вставлены, тогда они и компилируются уже в контексте того места, куда они вставлены.
Назначение файлов .h - сделать видимыми имена (объявить имена).