Шаг 3.
Операции (продолжение)

    Продолжаем изучение операций, поддерживаемых языком программирования С++.

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

     <выражение1> ? <выражение2> : <выражение3>                 .

Первым вычисляется значение выражения1. Если оно истинно, то есть не равно нулю, то вычисляется значение выражения2, которое становится результатом. Если при вычислении выражения1 получится 0, то в качестве результата берется значение выражения3. Например: при выполнении присваивания: g = x < 0 ? -х : x; переменная g в качестве своего значения будет иметь абсолютное значение переменной х.

    Операция явного преобразования (приведения) типа. Имеет две различные формы:

   

    Операции new и delete. Используются для динамического распределения памяти. Операции

     <указатель> = new <имя типа>               либо  
     <указатель> = new <имя типа>( <инициализатор>)

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

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

    Определение указателя имеет вид: тип *<имя указателя>;. Имя указателя - это идентификатор. Таким образом, int *h; - определение указателя h, который может быть связан с участком памяти, выделенным для величины целого типа. Введя с помощью определения указатель, можно присвоить ему возвращаемое операцией new значение:

     h = new int(15);     .   

В дальнейшем доступ к выделенному участку памяти обеспечивает выражение *h.

    В случае отсутствия в операции new инициализатора значение, которое заносится в выделенный участок памяти, не определено. Если в качестве имени типа в операции new используется массив, то для массива должны быть полностью определены все размерности. Инициализация участка памяти, выделяемого для массива, запрещена.

    Продолжительность существования выделенного с помощью операции new участка памяти - от точки создания до конца программы или до явного его освобождения.

    Для явного освобождения выделенного операцией new участка памяти используется оператор delete, общий вид которого следующий:

     delete  <указатель>;   , где 

указатель адресует освобождаемый участок памяти, ранее выделенный с помощью операции new. Например: delete h; освободит участок памяти, связанный с указателем h. Повторное применение операции delete к тому же указателю дает неопределенный результат.

    Для освобождения памяти, выделенной для массива, используется следующая модификация того же оператора: delete[ ] <указатель>;, где указатель связан с выделенным для массива участком памяти.

    Приведем таблицу приоритетов, или рангов операций, позволяющую определить последовательность выполнения операций.

Таблица 1. Приоритеты выполнения операций
Ранг
Операции
1
( )   [ ]    ->    ::    .
2
!    ~    +    -    ++     --    &    *    (тип)    sizeof    new    delete    тип( )
3
.*    ->*
4
*    /    %    (мультипликативные бинарные операции)
5
-    +    (аддитивные бинарные операции)
6
<<       >>
7
<    <=     >=     >
8
==     !=
9
&
10
^
11
|
12
&&
13
||
14
?: (условная операция)
15
=     *=    /=    %=    +=    -=    &=     ^=     !=    <<=     >>=
16
, (операция "запятая")


    Мы перечислили операции, поддерживаемые языком программирования С++. Следующий шаг будет посвящен знакомству со скалярными типами и выражениями.


Предыдущий шаг Содержание Следующий шаг