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 идентификатор пространства_имен;

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




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