- Локальные переменные
- Формальные параметры
- Статические переменные
- Глобальные переменные
- Input переменные
- Extern переменные
- Инициализация переменных
- Область видимости и время жизни переменных
- Создание и уничтожение объектов
Переменные
Объявление переменных
Переменные должны быть объявлены перед их использованием. Для идентификации переменных используются уникальные имена. Описания переменных используются для их определения и объявления типов. Описание не является оператором.
Простыми типами являются:
- char, short, int, long, uchar, ushort, uint, ulong – целые числа;
- color – целое число, представляющее RGB-цвет;
- datetime – дата и время, беззнаковое целое число, содержащее количество секунд, прошедших с 0 часов 1 января 1970 года;
- bool – логические значения true и false;
- double – числа двойной точности с плавающей точкой;
- float – числа одинарной точности с плавающей точкой;
- string – символьные строки.
Примеры:
string szInfoBox;
|
Сложные или составные типы:
Структуры – это составные типы данных, построенные с использованием других типов.
struct MyTime
|
До тех пор пока структура не объявлена, нельзя объявлять переменные типа структуры.
Массив - это индексированная совокупность однотипных данных:
int a[50]; // Одномерный массив из 50 целых чисел.
|
Индексом массива может быть только целое число. Допускаются не более чем четырехмерные массивы. Нумерация элементов массива начинается с 0. Последний элемент одномерного массива имеет номер на 1 меньший, чем размер массива, то есть обращение к последнему элементу массива из 50 целых чисел будет выглядеть как a[49]. То же самое относится и к многомерным массивам – индексация одного измерения производится от 0 до размер измерения-1. Последний элемент двумерного массива из примера будет выглядеть как m[6][49].
Статические массивы не могут быть представлены в виде таймсерий, то есть к ним не применима функция ArraySetAsSeries(), которая устанавливает доступ к элементам массива от конца массива к его началу. Если требуется обеспечить доступ к массиву как в таймсериях, используйте объект динамического массива.
При доступе за пределы массива исполняющая подсистема сгенерирует критическую ошибку и выполнение программы будет остановлено.
Встроенные методы для работы с массивами #
Для работы с массивами можно использовать функции из раздела Операции с массивами, а также встроенные методы:
Метод |
Аналог |
Описание |
---|---|---|
void array.Fill(const scalar value, const int start_pos=0, const int count=-1); |
Заполняет массив указанным значением |
|
void array.Free(); |
Освобождает буфер динамического массива и устанавливает размер нулевого измерения в 0 (ноль) |
|
int array.Resize(const int range0_size, const int reserve); int array.Resize(const int range_sizes[], const int reserve); |
Устанавливает новый размер в первом измерении массива |
|
int array.Print(); |
Выводит в журнал значения массива простого типа |
|
int array.Size(const int range=-1); |
Возвращает количество элементов во всем массиве (range=-1) либо в указанном измерении массива |
|
bool array.IsDynamic(); |
Проверяет, является ли массив динамическим |
|
bool array.IsIndicatorBuffer(); |
|
Проверяет, является ли массив индикаторным буфером |
bool array.IsSeries(); |
Проверяет, является ли массив таймсерией |
|
bool array.AsSeries(); |
Проверяет направление индексации массива |
|
bool array.AsSeries(const bool as_series); |
Устанавливает направление индексации в массиве |
|
int array.Copy(const src_array[], const int dst_start, const int src_start, const int cnt); |
Копирует значения массива в другой массив |
|
int array.Compare(const src_array[], const int dst_start, const int src_start, const int cnt); |
Возвращает результат сравнения двух массивов простых типов или пользовательских структур |
|
int array.Insert(const src_array[], const int dst_start, const int src_start, const int cnt); |
Вставляет в массив-приемник из массива-источника указанное число элементов |
|
int array.Remove(const int start_pos, const int count); |
Удаляет из массива указанное число элементов начиная с указанного индекса |
|
int array.Reverse(const int start_pos, const int count); |
Разворачивает в массиве указанное число элементов начиная с указанного индекса |
|
bool array.Swap(array& arr[]); |
Обменивается содержимым с другим динамическим массивом такого же типа |
|
void array.Sort(sort_function); |
Сортировка числовых массивов по первому измерению |
|
int array.Search(scalar value, search_function); |
Возвращает индекс первого найденного элемента в первом измерении массива |
|
int array.Find((scalar value, search_function); |
|
Производит поиск в массиве с помощью переданной функции и возвращает индекс первого найденного элемента |
array array.Select(scalar value, search_function); |
|
Производит поиск в массиве с помощью переданной функции и возвращает массив со всеми найденными элементами |
Спецификаторы доступа
Спецификаторы доступа указывают компилятору каким образом можно осуществлять доступ к переменным, членам структур или классов.
Спецификатор const объявляет переменную константой, и не позволяет изменять значение этой переменной в процессе выполнения программы. Допускается однократная инициализация переменной при ее объявлении.
Пример
int OnCalculate (const int rates_total, // размер массива price[]
|
Для доступа к членам структур и классов используются следующие спецификаторы:
- public – разрешает ничем неограниченный доступ к переменной или методу класса;
- protected – разрешает доступ со стороны методов данного класса, а также со стороны методов публично наследуемых классов. Иной доступ невозможен;
- private – разрешает доступ к переменным и методам класса только из методов данного класса.
- virtual – применим только к методам класса (но не к методам структур) и сообщает компилятору, что данный метод должен быть размещен в таблице виртуальных функций класса.
Классы памяти
Существуют три класса памяти: static, input и extern. Эти модификаторы класса памяти явно указывают компилятору, что соответствующие переменные распределяются в предопределенной области памяти, называемой глобальным пулом. При этом данные модификаторы указывают на особую обработку данных переменных.
Если переменная, объявленная на локальном уровне, не является статической, то распределение памяти под такую переменную производится автоматически на программном стеке. Освобождение памяти, выделенной под не статический массив, производится также автоматически при выходе за пределы области видимости блока, в котором массив объявлен.
Смотри также
Типы данных, Инкапсуляция и расширяемость типов, Инициализация переменных, Область видимости и время жизни переменных, Создание и уничтожение объектов, Статические члены класса