Учись программированию на C++ Builder бесплатно!
  • Главная
  • Определение доступа с помощью объявлений namespace и using
Определение доступа с помощью объявлений namespace и using

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

Таким инструментом является объявление области видимости имен ключевым словом namespace и последующее объявление использования функции и переменных из той или иной области ключевым словом using.

Синтаксис объявления области видимости:

namespace имя_области {
объявления типов, переменных и функций
}

Например:

namespace А
{
	int i = 1;
	void F1(int i)
	{
		Form1->Label1->Caption = "Область A: i = " + IntToStr(i);
	}
}

namespace B
{
	int i = 2;
	void F1(int i)
	{
		Form1->Label1->Caption = "Область В: i = " + IntToStr(i);
	}
}

Приведенные операторы объявляют две области видимости с именами А и В. В обеих областях объявлены переменные i и функции F1.

Объявление области с тем же именем может повториться в программе и содержать объявления каких-то новых переменных и функций. Соответствующие идентификаторы добавятся в указанную область.

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

В::F1(A::i);

вызовет функцию F1 из области В и передаст в нее значение переменной i из области А.

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

using namespace имя_области;

Например, если поместить в тексте оператор

using namespace А;

то все последующие операторы будут брать идентификаторы из области А. Тогда, например, размещенный где-то в тексте после using оператор

F1(i);

вызовет функцию F1 из области А и передаст в нее значение переменной i из области А.

Операторы using могут иметь и другую форму, определяющую область для конкретного идентификатора:

using имя_области::идентификатор;

Например, после операторов

using А::F1;
using В::i;

оператор

F1(i);

вызовет функцию F1 из области А и передаст в нее значение переменной i из области В.

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

namespace A
{
	...
}

namespace B
{
	using namespace А;
	...
		namespace С
	{
		...
	}
}

Здесь область В использует ранее объявленную область А и содержит внутри себя вложенную область С. Доступ к вложенным областям осуществляется последовательным применением операции разрешения области действия. Например:

using namespace В::С;

Поиск по сайту