- Синтаксис
- Типы данных
- Операции и выражения
- Операторы
- Функции
- Переменные
- Препроцессор
- Объектно-ориентированное программирование
- Пространства имен
Пространства имен
Пространство имен — это специально объявленная область, в пределах которой определяются различные идентификаторы: переменные, функции, классы и и т. д. Задается с помощью ключевого слова namespase:
namespace имя_пространства {
|
Использование namespace позволяет разделить глобальное пространство имен на подпространства. Все идентификаторы в пределах пространства имен доступны друг другу без уточнения. Для доступа к членам пространства имен извне используется оператор :: (операция разрешения контекста).
namespace ProjectData
|
Пространства имен используются для организации кода в виде логических групп и с целью избежания конфликтов имен, которые могут возникнуть когда в программе используется несколько библиотек. В таких случаях каждую библиотеку можно объявить в своем пространстве имен, чтобы затем явно обращаться к нужным функциям и классам каждой библиотеки.
Пространство имен может быть объявлено в нескольких блоках в одном файле и в нескольких файлах. Компилятор соединит вместе все части во время предварительной обработки и полученное в результате пространство имен будет содержать все члены, объявленные во всех частях. Пусть у нас реализован класс A во включаемом файле Sample.mqh:
//+------------------------------------------------------------------+
|
Этот класс мы хотим использовать в своем проекте, но у нас уже есть класс A. Чтобы иметь возможность использовать оба класса и избежать конфликта идентификаторов, достаточно включаемый файл обернуть в пространство имен:
//--- объявим первый класс A
|
Пространства имен могут быть вложенными. Вложенное пространство имен имеет неограниченный доступ к членам своего родительского пространства, но члены родительского пространства не имеют неограниченного доступа к вложенному пространству имен.
namespace General
|
Глобальное пространство имен
Если идентификатор не объявлен явно в пространстве имен, он неявно считается входящим в глобальное пространство имен. Чтобы явно указать глобальный идентификатор, используйте оператор разрешения области видимости без имени. Это позволит отличать данный идентификатор от любого другого элемента с таким же именем, находящегося в другом пространстве имен. Например, при импорте функции:
#import "lib.dll"
|
В данном случае все импортированные из DLL функции были включены в одноименное пространство имен. Это позволило компилятору однозначно определить какую функцию требуется вызвать.
Смотри также
Глобальные переменные, Локальные переменные, Область видимости и время жизни переменных, Создание и уничтожение объектов