Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
26. Определение, время жизни и области видимост...docx
Скачиваний:
7
Добавлен:
24.09.2019
Размер:
25.49 Кб
Скачать

Оператор определения контекста namespace

Одно из сравнительно поздних добавлений к языку Си++ – контексты, определяемые с помощью оператора namespace. Они позволяют заключить группу объявлений классов, переменных и функций в отдельный контекст со своим именем. Предположим, мы разработали набор классов для вычисления различных математических функций. Все эти классы, константы и функции можно заключить в контекст math для того, чтобы, разрабатывая программу, использующую наши классы, другой программист не должен был бы выбирать имена, обязательно отличные от тех, что мы использовали.

namespace math

{

double const pi = 3.1415;

double sqrt(double x);

class Complex

{

public:

. . .

};

};

Теперь к константе pi следует обращаться math::pi.

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

double math::sqrt(double x)

{

. . .

}

Контексты могут быть вложенными, соответственно, имя должно быть квалифицировано несколько раз:

namespace first {// первый контекст

int i;

namespace second // второй контекст

{

int i;

int whati() { return first::i; } // возвращается значение первого i

int anotherwhat { return i; }// возвращается значение второго i

}

first::second::whati(); // вызов функции

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

using. double x = pi; // ошибка, надо использовать math::pi

using namespace math; // использовать контекст math

double y = pi; // теперь правильно