Операции (продолжение)

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

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

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

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

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

  • (имя типа)операнд. Позволяет преобразовать значение операнда к
    нужному типу.
    В качестве операнда используется унарное выражение, которое в простейшем
    случае может быть
    переменной, константой или любым выражением, заключенным в круглые
    скобки. Например, следующие
    преобразования изменяют длину внутреннего представления целой константы
    1, не меняя
    ее значения:

    • (long)l - внутреннее представление имеет длину 4 байта;
    • (char)l - внутреннее представление имеет длину 1 байт;
  • имя типа(операнд). Функциональная форма преобразования типа
    используется
    в тех случаях, когда тип имеет простое (несоставное) наименование
    (обозначение),
    например:

    • long (2) - внутреннее представление имеет длину 4 байта;
    • double (2) - внутреннее представление имеет длину 8 байтов.
      Однако будет недопустимым выражение: unsigned long(2).

   

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

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

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

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

  • операция new float выделяет участок памяти размером 4 байта;
  • операция new int(15) выделяет участок памяти в 2 байта и
    инициализирует
    этот участок целым значением 15.

   
Определение указателя имеет вид: тип *<имя указателя>;. Имя
указателя - это
идентификатор. Таким образом, 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, (операция
"запятая")

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

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



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий