C++ Программирование в среде С++ Builder 5



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


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

Язык C++ решает эту проблему, позволяя разбить проект на сегменты с различными пространствами имен (namespaces). Заключив свои символы в отдельное пространство имен, вы, по существу, снабжаете имя всякого типа, переменной и т. д. некоторым скрытым префиксом. Например, если определить пространство имен

namespace MYSPACE { int х;

}

то переменная х будет существовать в пространстве имен MYSPACE. Любые другие переменные х, принадлежащие глобальной области действия или другому пространству имен, не будут с ней конфликтовать. Чтобы явно обратиться к переменной, применяется операция разрешения области действия:

MYSPACE::х = 11;

Пространства имен могут быть вложенными:

namespace OUTER { int x;

namespace INNER { int x;

}

Соответственно, чтобы ссылаться на эти переменные, нужно будет написать:

OUTER::х = 11;

OUTER::INNER::x = 22;

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

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

К созданию именных пространств можно отнести три момента:

  • Первоначальное объявление пространства.
  • Расширение пространства имен.
  • Определение анонимного пространства.
  • Первоначальное объявление пространства имен — это определение пространства с именем, еще не встречавшимся в программе. Синтаксис его следующий:

    namespace новое_имя {тело пространства имен}

    Тем самым в программе объявляется пространство имен с именем новое_имя.

    Объявленное пространство имен можно расширять, в том же исходном файле или любом другом, применяя ту же конструкцию, но с уже имеющимся именем:

    namespace существующее_имя [тело_пространства__имен]




    Содержание  Назад  Вперед