logo
Объектно-ориентированное программирование и C++

3.6.2.2 Пространства имен

Большинство нетривиальных приложений состоят из нескольких файлов с исходным текстом программы. Эти файлы могут создаваться и обслуживаться группой программистов. В конце концов, все файлы собираются вместе и проходят через финальную процедуру сборки готового приложения. Традиционно принято, чтобы все имена, не заключенные в некоторой локальной области (функции, теле класса или модуле трансляции), разделяли общие глобальные имена. Поэтому повторное определения имен, обнаруженное в процессе сборки отдельных модулей, приводит к необходимости каким-то образом различать каждое имя. Решение этой проблемы в C++ возложено на механизм пространства имен (namespace).

Этот механизм позволяет разбить приложение на ряд подсистем, причем каждая подсистема свободна в отношении выбора имен, и ее автор не должен беспокоиться о том, что такие же имена будет использовать кто-то другой. Каждая подсистема идентифицирует свое появление в общем пространстве глобальных имен уникальным идентификатором, который следует за ключевым словом namespace:

namespace <идентификатор> { [<объявления>] } Существует три способа доступа к элементам идентифицированного пространства имен:

• Явная квалификация доступа к конкретному элементу:

ALPHA :: varl; // доступ к переменной из ALPHA BETA :: Fl; // доступ к функции из BETA

• Доступ ко всем элементам:

using namespace :: ALPHA; // доступ ко всем именам из ALPHA

• Объявление нового идентификатора в локальном пространстве имен:

using :: new_name; // добавление идентификатора