Я понимаю, что заголовочный файл содержит все прототипы каждой функции, содержащейся в файле реализации; но какова реальная цель? Это связано с тем, что когда другая программа вызывает класс, она получает информацию только в файле заголовка, а реализация скрыта? Каковы реальные цели этого?
Цель состоит в том, что, когда кто-то дает вам библиотеку, они не всегда дают вам код. И, честно говоря, вы не хотите об этом знать. Вам просто нужно знать прототипы функций и структуры данных, которые они предоставляют, которые вы получаете из файла заголовка. И затем вы связываетесь с библиотекой.
Вот пример, который может помочь понять это для вас:
Я публикую библиотеку libfoo
(неважно, есть ли ее.so,.a или.dll) и сказал вам, что в ней есть куча хороших функций и типов данных, которые решают проблему, и вы хотите ее использовать. Если бы я не дал вам заголовочный файл, как ваш код мог бы скомпилироваться, когда ему нужно было знать, как большие структуры данных/какие подписи функций искать? Как вы знаете, как его кодировать?
Библиотека не будет ссылаться до привязки, и компиляция уже завершена в тот момент времени.