Чтобы узнать, что такое заголовочный файл, вам необходимо знать значение «объявления».
Проще говоря, в C / C ++ компиляция происходит в соответствии с исходным кодом. Если у меня есть A.cpp, и внутри я использую функцию foo (), которая будет определена где-то еще, мне нужно сообщить компилятору, что: «Эй, я использую foo (), хотя вы не можете увидеть, как она определена в любом месте моего источника, не волнуйтесь, это определено в другом источнике ". Они могут сообщить компилятору об этом, объявив foo () в A.cpp.
Если я являюсь автором foo (), все, кто использует foo (), должны записать объявление
void foo ();
в их исходном файле. Будет много дублированной и бессмысленной работы. И мне так сложно сказать парню, что «использует» foo () для правильного объявления. Поэтому, как автор foo (), я записываю файл, содержащий объявление об использовании foo (), и распространяю его, чтобы люди могли просто «импортировать» содержимое файла в свой источник. Файл, который я распространяю, является файлом заголовка. Действие импорта - #include в C / C ++. Да, #include - это не что иное, как вставка содержимого включенного файла в точку # include.
Пространство имен - это другая история. Короче говоря, вы можете подумать, что это «настоящее» имя функции / класса и т. Д., Например, если я сделаю
namespace FOO {
class Bar { }
}
На самом деле класс не называется Bar, его "настоящее" имя на самом деле FOO :: Bar.
C ++ предоставляет некоторый способ сэкономить при вводе длинного настоящего имени, используя «using».