C ++

C ++ пространство имен

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

Рассмотрим следующие два скалярных оператора в глобальной области видимости в следующей программе:

#включать
используя пространство имен std;
int varId = 5;
float varId = 2.3;
int main ()

возврат 0;

Попытка скомпилировать эту программу приводит к ошибке компиляции. Есть две переменные с одинаковым именем, varId. Хотя это две разные переменные двух разных типов, int а также плавать, компилятор отклоняет два объявления, потому что они имеют одно и то же имя. Следующая программа решает эту проблему, объявляя переменные с одинаковыми именами в двух разных обобщенных областях:

#включать
используя пространство имен std;
пространство имен NA

int varId = 5;

пространство имен NB

float varId = 2.3;

int main ()

cout << NA::varId << '\n';
cout << NB::varId << '\n';
возврат 0;

Результат выглядит следующим образом:

5
2.3

В приведенной выше программе есть два пространства имен: NA, который имеет определение целого числа, и NB, который имеет определение числа с плавающей запятой, но с тем же именем, что и целое число для NA. Наконец, при запуске программы использовалось одно и то же имя для двух разных переменных. Обратите внимание, что для доступа к одному и тому же имени двух разных переменных необходимо использовать конкретное имя для пространства имен, за которым следует общий идентификатор. Имя пространства имен и общий идентификатор разделяются оператором разрешения области «::.»Имя пространств имен будет различать объекты.

В этой статье рассматривается основная концепция пространства имен и его использование в языке программирования C ++. Чтобы следовать этой статье, вы должны иметь базовые знания языка C ++. Вы также должны знать область действия C ++, хотя она кратко объясняется в этой статье. Чтобы узнать больше о области действия C ++, найдите фразу «Область действия в C ++» (без кавычек) в поле поиска любого linuxhint.com и нажмите Enter. Это приведет вас к статье, написанной этим автором.

Содержание статьи

Что такое пространство имен?

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

Глобальное пространство имен и его проблема

Глобальное пространство имен - это глобальная область видимости. Рассмотрим следующую короткую программу:

#включать
используя пространство имен std;
int идент = 55;
плавающий идентификатор = 12.17;
int main ()

возврат 0;

В приведенной выше программе есть две переменные, обе называются Идентификатор. Эти переменные находятся в глобальной области видимости; то есть они находятся в глобальном пространстве имен. Попытка скомпилировать эту программу завершится ошибкой с сообщением об ошибке. Глобальная область не принимает более одной переменной с одинаковым именем, поэтому существует необходимость в настраиваемом пространстве имен.

Пользовательское пространство имен

Пространство имен не имеет только одного имени. Вместо этого пространство имен имеет набор имен, чтобы избежать конфликта с другими наборами имен. Чтобы избежать конфликта ниже в коде, перед каждым именем ставьте имя пространства имен и :: . Следующая программа иллюстрирует это с помощью двух настраиваемых пространств имен:

#включать
используя пространство имен std;
пространство имен NA

int varInt = 6;
float flt;

пространство имен NB

int varInt = 7;
float flt;

int main ()

cout << NA::varInt << '\n';
cout << NB::varInt << '\n';
NA :: flt = 2.5;
NB :: flt = 4.8;
cout << NA::flt << '\n';
cout << NB::flt << '\n';
возврат 0;

Результат:

6
7
2.5
4.8

Обратите внимание, что имена NA :: flt а также NB :: flt в конечном итоге были определены в основной() функция. C ++ не допускает такого определения в глобальной области видимости.

Обратите внимание, что настраиваемое пространство имен является вложенным пространством имен для глобального пространства имен.

Директива использования

Чтобы не вводить все время «namepace :: name» вместо просто «name» после объявления пространства имен, вы можете использовать с использованием директива. Синтаксис для использования с использованием директива выглядит следующим образом:

using пространство имен Namespace_name;

В с использованием Директива не является директивой препроцессора, поэтому заканчивается точкой с запятой (;).

Следующая программа иллюстрирует использование с использованием директива и многое другое:

#включать
используя пространство имен std;
пространство имен NB

int varInt = 7;
int func ()

return varInt;


int fn ()

с использованием пространства имен NB;
int myVar2 = func ();
// другие объекты и функции из NB следуют.
return myVar2;

int myVar3 = NB :: func ();
int main ()

cout << fn() << " << myVar3 << '\n';
возврат 0;

Результатом этой программы будет 7 7. Термин "с использованием пространства имен NB;»Был помещен в начало fn () определение. В func () из пространства имен NB вызывается чуть ниже, без предшествующего символа «NB ::.”

Переменная, объявленная в глобальной области (глобальном пространстве имен), видна от точки объявления до конца файла. Это также видно во вложенных пространствах имен (вложенных областях), таких как вложенные fn () объем функции выше. В с использованием Директива присоединяется к своему пространству имен от позиции, в которой она размещена, до конца области, в которой она размещена.

Название func () из пространства имен NB не отображается под fn () определение, потому что «используя пространство имен NB; " был помещен в область действия функции (блок). При этом условии, чтобы использовать "func ()»Вне блока (области) пространства имен NB, ему должен предшествовать«NB ::,»Как в следующем заявлении:

int myVar3 = NB :: func ();

В с использованием Директива объединяет свое пространство имен с внешним пространством имен вложенности от позиции, в которой она размещена, до конца внешнего пространства имен вложенности. В следующей программе пространство имен NA объединено с глобальным пространством имен. Оба пространства имен затем расширяются в fn () пространство имен определения функции, в котором они объединены с пространством имен NB. Пространство имен NB заканчивается в конце fn () определение функции, и два предыдущих пространства имен продолжаются до конца файла (читается через код).

#включать
используя пространство имен std;
пространство имен NA

int varInt = 6;
int func ()

return varInt;


пространство имен NB

int varInt = 7;
int func ()

return varInt;


с использованием пространства имен NA;
int myVar0 = varInt;
// другие объекты и функции из :: и NB следуют.
int fn ()

int myVar1 = varInt;
с использованием пространства имен NB;
int myVar2 = NB :: func ();
// другие объекты и функции из NB следуют до конца этой области.
return myVar1 + myVar2;

// Следуют только объекты и функции из :: и NB.
int myVar3 = NB :: func ();
int main ()

cout << myVar0 << " << fn() << " << myVar3 << '\n';
возврат 0;

На выходе 6, 13, 7.

Примечание: Глобальное пространство имен обозначено :: , означает, что перед оператором разрешения области, который следует за.

Под заявлением стоит знак «с использованием пространства имен NA;»Переменные из глобального пространства имен и пространства имен NA могут использоваться без указания их исходного пространства имен. В следующем заявлении используется varInt пространства имен NA. Область объединенного пространства имен global и NA простирается на fn () пространство имен функций. Итак varInt первого заявления в fn () область действия функции, относится к пространству имен NA.

Поскольку регион для пространств имен global и NA простирается на fn () область действия после знака «int myVar2 = NB :: func ();,»Любое имя из пространства имен NB может использоваться только в fn () область, не ставя перед ним "NB ::,”Только если это не произошло в NA и глобальных пространствах имен (блоках). В противном случае перед ним должен стоять «NB ::.»Область объединенных пространств имен для NA и global продолжается ниже fn () определение и в основной() функция до конца файла.

Расширение пространства имен NB начинается с «int myVar2 = NB :: func ();" в fn () блок и заканчивается в конце fn () блок определения.

Примечание: Пространства имен, регионы которых соединяются, не должны иметь одинаковые имена переменных в разных блоках пространств имен, так как это все равно вызовет конфликт.

Области пространства имен

Пространство имен - это область видимости. Помимо глобального пространства имен (глобальная область видимости), любое пространство имен должно быть объявлено в блоке. Этот блок является первой частью из возможных распределенных областей пространства имен. С помощью директивы using пространство имен может быть расширено как регионы в других областях.

Объекты, объявленные в теле пространства имен, называются членами пространства имен, а имена, введенные этими объявлениями в декларативную область пространства имен, называются именами членов пространства имен.

Вложенные пространства имен

Следующая программа показывает вложенные пространства имен:

#включать
используя пространство имен std;
пространство имен A

int я = 1;
пространство имен B

int я = 2;
пространство имен C

int я = 3;



int main ()

cout << A::i << " << A::B::i << " << A::B::C::i << '\n';
возврат 0;

Результат:

1 2 3

Обратите внимание, что доступ к трем значениям был осуществлен с помощью оператора разрешения области видимости.

Стандартное пространство имен

В C ++ есть библиотека, называемая стандартной библиотекой. Имена объектов, функций и других сущностей в этой библиотеке взяты из пространства имен, называемого стандартным пространством имен, записанного как стандартное. Стандартная библиотека содержит подбиблиотеки, и одна из этих подбиблиотек iostream. В iostream библиотека содержит объект cout, который используется для отправки результатов на консоль (терминал).

Название cout должен быть в стандартное пространство имен. Использовать iostream с этими стандартное пространство имен, программа должна быть следующей:

#включать
используя пространство имен std;

Обратите внимание на использование с использованием директива и стандартное. Термин "#включать »Является директивой препроцессора и не заканчивается точкой с запятой. Он включает iostream «файл» в позиции своей директивы.

Заключение

Пространство имен - это область видимости. Описание (определение) пространства имен содержит базовые объявления и / или определения объектов, функций и других сущностей C ++. Вне определения пространства имен к имени можно получить доступ с помощью синтаксиса «namespaceName :: имя.”Помимо глобального пространства имен (глобальная область видимости), любое пространство имен должно быть объявлено в блоке. Этот блок является первой частью из возможных распределенных областей пространства имен. С с использованием директиве, пространство имен может быть расширено как регионы в других областях. Пространства имен, регионы которых объединены, не должны иметь одинаковые имена переменных в разных блоках пространств имен, так как это все равно вызовет конфликт имен.

Chrys

Как использовать чит-движок GameConqueror в Linux
В статье содержится руководство по использованию чит-движка GameConqueror в Linux. Многие пользователи, играющие в игры на Windows, часто используют п...
Лучшие эмуляторы игровой консоли для Linux
В этой статье будет перечислено популярное программное обеспечение для эмуляции игровых консолей, доступное для Linux. Эмуляция - это уровень совмести...
Лучшие дистрибутивы Linux для игр в 2021 году
Операционная система Linux прошла долгий путь от своего первоначального простого серверного вида. Эта ОС значительно улучшилась за последние годы и те...