Я хочу знать точную разницу между файлом заголовка (как в MyHeader.hpp) и namespace
в c++
?
В чем разница между заголовком и пространством имен?
Ответ 1
Заголовочные файлы - это фактические файлы, хранящиеся в файловой системе, на которые ссылаются имя файла, и #include
'd в других файлах (по крайней мере, на языках C/С++ или других языках с использованием препроцессора макросов M4). Файлы заголовков обычно группируют фрагменты кода, которые являются взаимозависимыми частями одного и того же конкретного элемента вместе. Например, игра может иметь заголовочный файл для всего своего графического рендеринга.
Пространства имен, с другой стороны, являются элементом языка программирования - они не существуют как объект файловой системы, а скорее как обозначение внутри кода, сообщающее компилятору, что определенные вещи находятся внутри этого пространства имен. Пространства имен обычно группируют интерфейсы (функции, классы/структуры, типы) аналогичных (но не обязательно взаимозависимых) элементов. Например, пространство имен std
в С++ содержит все функции и классы стандартной библиотеки.
Ответ 2
Чтобы узнать, что такое файл заголовка, вам нужно знать значение "объявления".
Чтобы выразить это простыми словами, в C/С++ компиляция происходит с использованием одного источника. Если у меня есть A.cpp, и внутри я использую функцию foo(), которая будет определена где-то в другом месте, мне нужно сообщить компилятору, что: "Эй, я использую foo(), хотя вы не видите, что это определено нигде в моем источнике, не волнуйтесь, это определено в другом источнике". Их способ сообщить компилятору об этом - "объявить" foo() в A.cpp.
Если я являюсь автором foo(), всем, кто использует foo(), необходимо записать декларацию void foo(); в исходном файле. Это будет много дублируемая и бессмысленная работа. И мне так сложно сказать, что парень "использует" foo() для правильного объявления. Поэтому, как автор foo(), я записываю файл, содержащий объявление для использования foo(), и распространяю его так, чтобы люди могли просто "импортировать" содержимое файла в свой источник. Файл, который я распространяю, является файлом заголовка. Действие импорта: #include в C/С++. Да, #include - это не что иное, как вставка содержимого включенного файла в место #include.
Пространство имен - это еще одна история. Короче говоря, вы можете думать, что это "настоящее" имя функции/класса и т.д., Например, если я делаю
namespace FOO {
class Bar { }
}
Класс на самом деле не называется Bar, это "реальное" имя на самом деле FOO:: Bar.
С++ предоставляет некоторый способ сохранить вас, введя длинное реальное имя, используя "использование".
Ответ 3
Заголовочный файл - это файл, который должен быть включен исходными файлами. Обычно они содержат объявления определенных классов и функций.
Пространство имен позволяет коду классифицировать идентификаторы. То есть классы, функции и т.д. Могут быть помещены внутри пространства имен, сохраняя их отдельно от других классов, которые не связаны друг с другом. Например, в С++ все из стандартной библиотеки находится в пространстве имен std
.
Ответ 4
В обычном man langauge файл заголовка будет уникальным файлом в файловой системе, а пространство имен будет охватывать один или несколько файлов.
то есть. HeaderFile - это физическая вещь, а пространство имен - логическая вещь.
узнать о них подробнее здесь http://en.wikipedia.org/wiki/Namespace и http://en.wikipedia.org/wiki/Header_file
Ответ 5
Пространство имен - это новая концепция "ansi С++" для идентификации глобальных идентификаторов, которые должны часто использоваться в вашей программе.
Заголовочный файл - это исходный файл, который поддерживает вашу программу путем повторного использования надежного и проверенного кода, что позволяет сэкономить время и силы!!!!
Ответ 6
Заголовочный файл - это, по сути, файловая система, это физическая вещь, он содержит классы и функции, если вы не включили заголовочный файл и попытаетесь выполнить какую-либо операцию, например преобразование строки верхнего регистра в нижний регистр, вычисление длины строки, вам нужно включить файл заголовка С помощью string.h компилятор понимает, что вы выполняете операцию со строкой. При выполнении кода он будет связываться с соответствующей библиотекой, в которой находятся такие функции. С другой стороны, пространство имен является частью программы, это логично, оно предназначено для держать один набор имен отдельно от других. Имя класса, объявленное в одном пространстве имен, не конфликтует с тем же именем класса, объявленным в другом. Все пространства имен находятся в библиотеке классов .net framework, которая представляет собой огромную коллекцию иерархий пространств имен. Каждое пространство имен содержит классы, структуры, интерфейсы, перечисление, делегаты... и так далее...
Ответ 7
Пространство имен - это новое слово, присвоенное headerfile. Сделать новые версии доступными.