Пространство имен в C ++ используется для организации кода в логические группы и предотвращения конфликтов имен, которые могут возникнуть, особенно когда ваша кодовая база включает несколько библиотек. В этой статье будут рассмотрены следующие указатели:
шаг за шагом обучение
- Потребность в пространстве имен
- Определение пространства имен в C ++
- Что следует помнить при определении пространства имен
- Использование пространства имен в C ++
- Несмежные пространства имен
- Вложенные пространства имен
Потребность в пространстве имен
Рассмотрим ситуацию: мы пишем код, в котором есть функция под названием abc (), и есть еще одна предопределенная библиотека, которая также имеет ту же функцию abc (). Теперь во время компиляции компилятор не знает, на какую версию функции abc () мы ссылаемся в нашем коде.
Чтобы преодолеть эту трудность, создано пространство имен, которое используется в качестве дополнительной информации для различения похожих функций, переменных, классов и т. Д. С одинаковыми именами, доступных в разных библиотеках. Используя пространство имен, мы можем определить контекст, в котором определены имена. По сути, пространство имен определяет область видимости.
Все типы и функции стандартной библиотеки C ++ объявлены в пространстве имен std или пространствах имен, вложенных внутри std, поэтому они широко используются в большинстве программ.
Определение пространства имен
Чтобы определить пространство имен, мы начинаем с ключевого слова namespace, за которым следует имя пространства имен следующим образом:
namespace namespace_name {int a, b // объявления кода, где // a и b объявлены в // области namespace_name}
Что следует помнить при определении пространства имен
- Объявления пространств имен появляются только в глобальной области.
- Объявления пространств имен не имеют спецификаторов доступа.
- Объявления пространства имен могут быть вложены в другое пространство имен.
- Не нужно ставить точку с запятой после закрывающей фигурной скобки определения пространства имен.
- Определение пространства имен можно разделить на несколько единиц.
#include using namespace std namespace first_function {void func () {cout<< 'Inside first_function' << endl } } namespace second_function { void func() { cout << 'Inside second_function' << endl } } int main () { // Calls function from first name space. first_function::func() // Calls function from second name space. second_function::func() return 0 }
Вывод:
В приведенном выше примере для определения функции func () два разных раза мы используем концепцию пространства имен. Мы определяем первую функцию в пространстве имен first_function ивторая функция в пространстве имен second_function. Для вызова этих функций мы используем оператор разрешения области видимости следующим образом - first_function :: func () и second_function :: func ().
Использование пространства имен в C ++
Есть три способа использовать пространство имен в программе:
- Директива using
- Объявление использования
- Оператор разрешения области видимости (: :)
Директива using
Мы можем избежать добавления пространств имен с помощью с помощью директива пространства имен. с помощью ключевое слово позволяет нам импортировать все пространство имен в вашу программу с глобальной областью видимости. Его можно использовать для импорта пространства имен в другое пространство имен или любую программу в соответствии с нашими требованиями.
как инициализировать объект в Python
Рассмотрим заголовочный файл Namespace_first.h:
пространство имен First {int a class First_class {int i}}
Включение указанного выше файла заголовка пространства имен в файл Namespace_second.h: include «Namespace_first.h»
пространство имен Second {с использованием пространства имен First_class obj int y}
Мы импортируем namespace_First в namespace_Second, поэтому класс First_class теперь будет доступен в namespace_Second. Следовательно, мы можем написать следующую программу в отдельном файле, скажем, new_file.cpp.
#include 'Namespace_second.h' void test () {using namespace Second // создание объекта класса First_class First_class obj2}
Следовательно директива using значительно упрощает использование пространства имен в C ++ в любом месте.
Объявление использования
В объявлении using мы импортируем по одному конкретному имени за раз, которое доступно только внутри текущей области и вызывается с помощью разрешения области. ПРИМЕЧАНИЕ. Имя, импортированное с использованием-декларации, может переопределить имя, импортированное с помощью директивы using. Мы видим это в примере ниже.
Рассмотрим заголовочный файл New_File.h:
пространство имен First {void A () {cout<< 'A of First namespacen' } } namespace Second { void A() { cout << 'A of Second namespacen' } }
Теперь давайте создадим новый файл программы с именем New_file_2.cpp со следующим кодом:
массив объектов java
#include 'New_file.h' void B () {using namespace First // использование директивы using Second :: A // использование объявления First :: A () // класс A () первого пространства имен A () // вызывает A () из второго пространства имен}
Оператор разрешения области (: :)
Мы можем явно указать любое имя, объявленное в пространстве имен, используя имя пространства имен и разрешение области « :: ' оператор с идентификатором.
namespace New_space {class X {static int i public: void func ()} // объявление имени класса class Y} // Инициализация статической переменной класса int New_space :: X :: i = 23 class New_space :: Y {int a public: int getdata () {cout<< a } // Constructor declaration Y() } // Constructor definition explicitly New_space::Y::Y() { a=0 }
Несмежное пространство имен в C ++
Как мы знаем, пространство имен в C ++ может быть определено в нескольких частях, поэтому оно состоит из суммы его отдельно определенных частей. Итак, если для одной части пространства имен требуется имя, определенное в другом файле, это имя все равно должно быть объявлено в его области видимости. Написание следующего пространства имен следующим образом либо определяет новое пространство имен, либо добавляет новые элементы к существующему:
пространство имен namespace_name {// тело кода}
Вложенное пространство имен в C ++
Пространства имен можно легко вкладывать, и мы можем определить одно пространство имен внутри другого пространства имен следующим образом:
namespace namespace_name1 {// тело кода пространства namespace_name1 namespace_name2 {// тело кода вложено namamespace_name2}}
На этом мы подошли к концу статьи о пространстве имен в C ++. Надеюсь, вы получили представление о том, что такое пространство имен в C ++ и каковы различные способы его определения. Если вы хотите узнать больше, ознакомьтесь с от Edureka, надежной компании онлайн-обучения. Курс обучения и сертификации по Java J2EE и SOA от Edureka разработан, чтобы обучить вас базовым и продвинутым концепциям Java, а также различным средам Java, таким как Hibernate и Spring.
Есть вопрос к нам? Пожалуйста, укажите это в разделе комментариев этого блога, и мы свяжемся с вами как можно скорее.