Если существует файл foo.cpp, то он обычно имеет связанный заголовочный файл foo.h со всеми объявлениями для функций, определенных в foo.cpp. Таким образом, все остальные файлы, которые используют функции в foo.cpp, могут просто включать файл foo.h и использовать их. Вот мое простое понимание заголовочных файлов.
Однако я не вижу такой связи между заголовочным файлом iostream и классом iostream. Заголовочный файл iostream объявляет только несколько внешних переменных, но, похоже, ни одна из них не имеет никакого отношения к классу iostream напрямую. Класс iostream также, похоже, не объявляет никаких новых функций. Почему тогда у нас есть класс iostream и заголовочные файлы iostream? Извиняюсь, если я звучу смущенным, но это действительно смущает меня.