Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Tema_7.doc
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
91 Кб
Скачать
☆

Примечание

  • Иногда для наглядности в случаях проверки переменной х на неравенство нулю пишут if(х != 0)или while(х != 0), хотя это полностью эквивалентно if(х) и while(х) соответственно.

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

Логическая структура программы отражается с помощью пространств имен. Если некоторые объявления можно объединить по какому-либо критерию, их можно поместить в одно пространство имен. Таким образом реализуется механизм логического группирования. Пространство имен является областью видимости. Его имя может быть использовано в качестве квалификатора в операции разрешения области видимости. В пространство имен обычно заключают набор средств, относящийся к какой-то части программы:

namespace MySpace

{

int k = 10;

void f(int n)

{

k = n;

}

}

Определения объектов, объявленных внутри пространства имен, могут находиться и вне пространства имен:

namespace MySpace

{

int k = 10;

void f(int n);

}

void MySpace::f(int n)

{

k = n;

}

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

namespace MySpace

{

int k = 10;

void f(int n);

}

//

namespace MySpace

{

void f(int n)

{

k = n;

}

}

Имена, объявленные и определенные внутри пространства имен, без каких-либо ограничений доступны в пределах этого пространства. Чтобы получить доступ к именам пространства из других частей программы, необходимо использовать синтаксис имя-пространства::имя:

int x = MySpace::k;

Имеется возможность задания псевдонимов для пространств имен, например:

namespace YourSpace = MySpace;

Существуют так называемые безымянные пространства имен, в который помещаются объекты, видимые только в своем файле (единице компиляции). Такие имена имеют так называемое внутреннее связывание.

// файл f1.cpp

namespace

{

int x = 100; // х известно только в f1.cpp

}

// файл f2.cpp

namespace

{

int x = 200; // x известно только в f2.cpp

}

Для того, чтобы все имена пространства можно было использовать без квалификатора, используется using-директива:

using namespace MySpace;

// Свободное использование всех имен пространства

Директива using делает все имена пространства глобальными в пределах данного файла или данного блока.

В отличие от using-директивы, using-объявление применяется к отдельным именам.

using MySpace::k;

using MySpace::f;

// использование f и k без квалификатора

С помощью using-директивы можно объединять пространства имен:

namespace NewSpace

{

using namespace FirstSpace; // using-директива

using namespace SecondSpace; // using-директива

}

Если требуется доступ только к нескольким именам из пространства, можно произвести явный отбор при помощи создания нового пространства и использования using-объявления:

namespace NewSpace

{

using OtherSpace::name1; // using-объявление

using OtherSpace::name2; // using-объявление

}

Имена, указанные с помощью using-объявлений, имеют приоритет по отношению к именам, сделанным доступными при помощи using-директив. Механизм перегрузки функций работает сквозь границы пространств имен. Пространства имен открыты. К ним можно добавлять новые имена в нескольких объявлениях:

namespace FirstSpace

{

// начало

}

namespace SecondSpace

{

// прерывает

}

namespace FirstSpace

{

// продолжение

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]