В чем разница между заголовочным файлом и пространством имен? - PullRequest
14 голосов
/ 19 июля 2010

Я хочу узнать точную разницу между файлом заголовка (как в MyHeader.hpp) и namespace в c++?

Ответы [ 7 ]

17 голосов
/ 19 июля 2010

Заголовочные файлы являются фактическими файлами - хранятся в файловой системе, на которую ссылается имя файла, и #include 'd - в других файлах (по крайней мере, в C / C ++ или других языках, использующих препроцессор макроса M4). Заголовочные файлы обычно группируют фрагменты кода, которые являются взаимозависимыми частями одного и того же конкретного элемента. Например, в игре может быть заголовочный файл для всей графики.

Пространства имен, с другой стороны, являются элементом языка программирования - они существуют не как объект файловой системы, а скорее как обозначение в коде, сообщающее компилятору, что определенные вещи находятся в этом пространстве имен. Пространства имен обычно группируют интерфейсы (функции, классы / структуры, типы) похожих (но не обязательно взаимозависимых) элементов. Например, пространство имен std в C ++ содержит все функции и классы стандартной библиотеки.

15 голосов
/ 19 июля 2010

Чтобы узнать, что такое заголовочный файл, вам необходимо знать значение «объявления».

Проще говоря, в 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».

3 голосов
/ 19 июля 2010

Заголовочный файл - это файл, предназначенный для включения в исходные файлы.Обычно они содержат объявления определенных классов и функций.

Пространство имен позволяет коду классифицировать идентификаторы.Таким образом, классы, функции и т. Д. Могут быть помещены в пространство имен, отделяя те от других классов, которые не связаны.Например, в C ++ все из стандартной библиотеки находится в пространстве имен std.

0 голосов
/ 16 апреля 2019

Заголовочный файл - это, по сути, файловая система, это физическая вещь, он содержит классы и функции, если вы не включили заголовочный файл и попытаетесь выполнить какую-либо операцию, например преобразование заглавной строки в строчную, вычисление необходимой длины строки.включите заголовочный файл string.h, с помощью которого компилятор понимает, что вы выполняете операцию со строкой. И при выполнении кода он будет связываться с соответствующей библиотекой, в которой находятся такие функции. С другой стороны, пространство имен является частью программы, это логично, оно предназначенопредоставляя способ отделить одно имя от другого.Имя класса, объявленное в одном пространстве имен, не конфликтует с тем же именем класса, объявленным в другом.Все пространства имен находятся в библиотеке классов .net framework, которая представляет собой огромную коллекцию иерархий пространств имен.Каждое пространство имен содержит классы, структуры, интерфейсы, перечисление, делегаты ... и так далее ...

0 голосов
/ 25 августа 2016

Пространство имен - это новая концепция ansi c ++ для определения глобальных идентификаторов, которые часто используются в вашей программе.

Заголовочный файл - это исходный файл, который поддерживает вашу программу за счет повторного использования надежного и проверенного кода, что экономит время и усилия !!!!

0 голосов
/ 02 июня 2011

Пространство имен - это новое слово, данное заголовочному файлу.Сделать новые версии доступными.

0 голосов
/ 19 июля 2010

В обычном языковом файле заголовок будет уникальным файлом в файловой системе, а пространство имен будет охватывать один или несколько файлов.

т.е. HeaderFile - это физическая вещь, а пространство имен - логическая вещь.

узнайте больше о них здесь http://en.wikipedia.org/wiki/Namespace и http://en.wikipedia.org/wiki/Header_file

...