Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

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

Рассмотрим ситуацию, когда у нас есть два человека с одинаковым именем Зара в одном классе. Всякий раз, когда нам нужно их определенно различать, нам придется использовать некоторую дополнительную информацию вместе с их именем, например, район, если они живут в другом районе, или имя их матери или отца и т. д.

Такая же ситуация может возникнуть и в ваших приложениях на C++. Например, вы можете писать код, который имеет функцию xyz(), и есть другая доступная библиотека, которая также имеет ту же функцию xyz(). Теперь у компилятора нет возможности узнать, на какую версию функции xyz() вы ссылаетесь в своем коде.

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

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

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

namespace namespace_name {
   // code declarations
}

Чтобы вызвать версию функции или переменной с поддержкой пространства имен, добавьте (::) имя пространства имен следующим образом:—

name::code;  // code could be variable or function.

Давайте посмотрим, как пространство имен охватывает объекты, включая переменные и функции —

Живая демонстрация
#include <iostream>
using namespace std;

// first name space
namespace first_space {
   void func() {
      cout << "Inside first_space" << endl;
   }
}

// second name space
namespace second_space {
   void func() {
      cout << "Inside second_space" << endl;
   }
}

int main () {
   // Calls function from first name space.
   first_space::func();
   
   // Calls function from second name space.
   second_space::func(); 

   return 0;
}

Если мы скомпилируем и запустим приведенный выше код, это даст следующий результат —

Inside first_space
Inside second_space

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

Вы также можете избежать добавления пространств имен с помощью using namespace. директива. Эта директива сообщает компилятору, что последующий код использует имена в указанном пространстве имен. Таким образом, пространство имен подразумевается для следующего кода —

Живая демонстрация
#include <iostream>
using namespace std;

// first name space
namespace first_space {
   void func() {
      cout << "Inside first_space" << endl;
   }
}

// second name space
namespace second_space {
   void func() {
      cout << "Inside second_space" << endl;
   }
}

using namespace first_space;
int main () {
   // This calls function from first name space.
   func();
   
   return 0;
}

Если мы скомпилируем и запустим приведенный выше код, это даст следующий результат —

Inside first_space

Директива «using» также может использоваться для ссылки на конкретный элемент в пространстве имен. Например, если единственная часть пространства имен std, которую вы собираетесь использовать, — это cout, вы можете ссылаться на нее следующим образом —

using std::cout;

Последующий код может ссылаться на cout без добавления пространства имен, но другие элементы в std пространство имен по-прежнему должно быть явным следующим образом —

Живая демонстрация
#include <iostream>
using std::cout;

int main () {
   cout << "std::endl is used with std!" << std::endl;
   
   return 0;
}

Если мы скомпилируем и запустим приведенный выше код, это даст следующий результат —

std::endl is used with std!

Имена, введенные в using директива подчиняется обычным правилам области видимости. Имя видно с точки использования директиву в конец области, в которой находится директива. Объекты с тем же именем, которые определены во внешней области, скрыты.

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

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

Таким образом, если для одной части пространства имен требуется имя, определенное в другом файле, это имя все равно должно быть объявлено. Написание следующего определения пространства имен либо определяет новое пространство имен, либо добавляет новые элементы к существующему —

namespace namespace_name {
   // code declarations
}

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

Пространства имен могут быть вложены друг в друга, когда вы можете определить одно пространство имен внутри другого пространства имен следующим образом —

namespace namespace_name1 {
   // code declarations
   namespace namespace_name2 {
      // code declarations
   }
}

Вы можете получить доступ к членам вложенного пространства имен с помощью операторов разрешения следующим образом —

// to access members of namespace_name2
using namespace namespace_name1::namespace_name2;

// to access members of namespace:name1
using namespace namespace_name1;

В приведенных выше утверждениях, если вы используете namespace_name1, то это сделает элементы namespace_name2 доступными в области следующим образом:—

Живая демонстрация
#include <iostream>
using namespace std;

// first name space
namespace first_space {
   void func() {
      cout << "Inside first_space" << endl;
   }
   
   // second name space
   namespace second_space {
      void func() {
         cout << "Inside second_space" << endl;
      }
   }
}

using namespace first_space::second_space;
int main () {
   // This calls function from second name space.
   func();
   
   return 0;
}

Если мы скомпилируем и запустим приведенный выше код, это даст следующий результат —

Inside second_space

Язык C

  1. Операторы С++
  2. С++ Комментарии
  3. Шаблоны классов С++
  4. Обзор С++
  5. Константы/литералы С++
  6. Операторы в С++
  7. Числа в С++
  8. Ссылки на С++
  9. Пространства имен в C++
  10. Шаблоны С++