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


Пространства имен - часть 2


Тела всех пространств с одинаковыми именами, определенных на глобальном уровне, составляют одно именное пространство. Каждый идентификатор в его пределах должен быть уникален.

Синтаксис C++ позволяет определять анонимные пространства имен:

namespase{

int x;

double у;

}

Все анонимные пространства имен в глобальной области действия данного файла составляют единое целое. Говоря проще, объявление глобальных символов как относящихся к анонимному пространству имен эквивалентно их объявлению с модификатором static:

static int x;

static double у;

Доступ к пространству имен

Доступ к элементам конкретного пространства имен может осуществляться тремя способами:

  • Путем явной квалификации имени.
  • Посредством квалифицирующего объявления.
  • С помощью директивы using.

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

Квалифицирующее объявление выглядит следующим образом:

using иденгификатор_пространства_имен::имя;

Элемент указанного пространства имен, идентифицируемый именем, объявляется как принадлежащий локальной области действия. После этого все не квалифицированные ссылки на имя будут рассматриваться как относящиеся к данному элементу. Вот пример:

namespace ALPHA {

int RetJ(int j) {return j;} } namespace BETA {

int RetJ(int j) {return (j * 2);}

}

int main(void) {

using BETA::RetJ; // Квалифицирующее объявление RetJ().

int x = 11;

printf("Calling RetJ(): %d\n"/ RetJ(x));

// Вызывает BETA::RetJ(). return 0;

}

Последняя форма доступа к пространству имен — директива using. Она имеет вид:

using namespace идентификатор пространства_имен;

В результате указанное пространство имен будет приниматься по умолчанию, если ссылка на некоторое имя не может быть разрешена локально (как и в общем случае, локальное объявление скрывает любое объявление в “более внешней” области действия). Вот пример, демонстрирующий различные моменты применения именных пространств:




Начало  Назад  Вперед