Поддержка JavaScript отключена
SBP-Program | |||||
На главную — > C++ |   | ||||
  |
Пространство имен (namespace) — это способ объединения логически связанных объявлений под общим именем. Пример пространства имен: Получаем: В примере созданы два пространства имен: first и second. Оба пространства содержат одинаковые переменные. Но именно факт принадлежности, например, переменной a к пространству first не позволяет её спутать с переменной из другого пространства имён. Это позволяет избегать конфликта имен. Запись first::a = 1;
означает, что используется переменная int а, объявленная в пространстве имен first. Это пример using-объявления. Оператор :: называется оператором определения области видимости. Создаются пространства имен при помощи ключевого слова namespace: Для того, чтобы использовать все имена из пространства имен можно применить директиву using namespace. Пример использования using namespace std: using namespace std позволяет использовать имена из пространства имен std. std — это имя стандартной библиотеки C++. Если в последнем примере убрать строку подключения пространства имен using namespace std, то надо будет указывать наименование пространства имен явно: Пространство имен определяет область видимости. В примерах явно определялись пространства имён. А вот другие примеры пространств имен. Область видимости внутри функции — это тоже пространство имен. Область видимости глобальных переменных — это тоже пространство имен. Класс — это тоже пространство имен. Возможно создание пространства имен без имени. Пример: Здесь подразумевается использование директивы using namespace. Такие пространства имен нужны для ухода от возможного конфликта имен. Если название пространства имен слишком длинное, то можно создать псевдоним пространства имен. Пример: Строка namespace ug = underground;
вводит псевдоним ug для пространства имен underground. Далее мы работаем с псевдонимом. Если предполагается использовать только часть имён из пространства имен, то можно отобрать эту часть в новое пространство имен и использовать его. Пример: Здесь из пяти переменных пространства имен underground мы предполагаем использовать только две. Создаём новое пространство имен ug, в котором имеются два using-объявления. Далее мы работаем с пространством имен ug. Пространство имен можно изменить, т.е. дописать в него новые объявления. Пример: Получаем: Пространства имен можно вкладывать друг в друга Пример: Получаем: В примере namespace upper содержит namespace inner. Обратите внимание, как идёт обращение к полю внутреннего пространства имен: upper::inner::c = 1.2;
Рассмотрим глобальное пространство имен. Здесь используют оператор :: без указания имени пространства. В глобальное пространство имен попадают глобальные объявления, включая соответствующие using-директивы. Пример глобального пространства имен: Важно увидеть разницу между using-объявлениями и using-директивами. using-директива делает доступными все имена из данного пространства имен, но не объявляет их локально. using-объявление имеет приоритет перед using-директивой. Рассмотрим пример: Получаем: Строка using namespace sbp;
это using-директива, которая делает доступными все имена из пространства имен sbp. Строка a = 1;
это работа с локальной переменной а. Чтоб присвоить значения переменной а из пространства sbp, надо явно указать на sbp: sbp::a = 2;
Это же относится и к глобальной переменной а. Локальная переменная а закрывает глобальные переменные с тем же именем. Теперь пример для using-объявления: Получаем: Строка using sbp::b;
это using-объявление. Здесь локально объявляется переменная b из пространства имён sbp. После этого объявления можно проводить действия: b = 2;
но using-объявление для а using sbp::a;
привело бы нас к ошибке, ведь в примере уже определена локальная переменная а. Программирование |
  | |||
 
|
 
|
||||