Поименованные области в С++

Служат для логического группирования объявлений и ограничения доступа к ним. Чем больше программа, тем более актуально использование поименованных областей. Простейший пример - отделение кода, написанного одним человеком, от кода, написанного другим. При использовании единственной глобальной области видимости формировать программу из отдельных частей очень сложно из-за возможного совпадения и конфликта имен. Использование поименованных областей препятствует доступу к ненужным средствам.

Объявление поименованной области (ее называют пространством имен) имеет формат:
namespace [ имя_области ]{ /* Объявления */ }
Поименованная область может объявляться неоднократно, причем после-дующие объявления рассматриваются как расширения предыдущих. Таким образом, поименованная область может объявляться и изменяться за рамками одного файла. Если имя области не задано, компилятор определяет его самостоятельно с помощью уникального идентификатора, различного для каждого модуля.

Объявление объекта в неименованной области равнозначно его описанию как глобального с модификатором static. Помещать объявления в такую область полезно для того, чтобы сохранить локальность кода. Нельзя получить доступ из одного файла к элементу не-именованной области другого файла.

Пример.
namespace demo{
int 1 = 1:
int к = 0;
void funcl(int);
void func2(int) { /* ... */ }
}
namespace demo{ // Расширение
// int i = 2; Неверно - двойное определение
void fund (double); // Перегрузка
void func2(int); // Верно (повторное объявление)
}
В объявлении поименованной области могут присутствовать как объявления, так и определения. Логично помещать в нее только объявления, а определять их позднее с помощью имени области и оператора доступа к области видимости ::.

Пример:
void demo::fund(1nt) { / * ... * / }
Это применяется для разделения интерфейса и реализации. Таким способом нельзя объявить новый элемент пространства имен. Объекты, объявленные внутри области, являются видимыми с момента объявления. К ним можно явно обращаться с помощью имени области и оператора доступа к области видимости ::, например:
demo::1 = 100: demo::func2(10);
Если имя часто используется вне своего пространства, можно объявить его доступным с помощью оператора using:
using demo::i;
После этого можно использовать имя без явного указания области. Если требуется сделать доступными все имена из какой-либо области, используется оператор using namespace:
using namespace demo:
Операторы using и using namespace можно использовать и внутри объявления поименованной области, чтобы сделать в ней доступными объявления из другой области:
namespace Department_of_App1ied_Mathematics{
using demo::i;
// ...
}
Имена, объявленные в поименовагнюй области явно или с помощью оператора using, имеют приоритет по отношению к именам, объявленным с помощью оператора using namespace (это имеет значение при включении нескольких поименованных областей, содержащих совпадающие имена).

Короткие имена пространств имен могут войти в конфликт друг с другом, а длинные непрактичны при написании реального кода, поэтому допускается вводить синонимы имен:
namespace DAM = Department_of__Applied_Mathematics;
Онлайн всего: 4
Гостей: 4
Пользователей: 0

STUDLAB Сообщить про опечатку на сайте