Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
m_pos_5.doc
Скачиваний:
10
Добавлен:
01.07.2025
Размер:
353 Кб
Скачать
☆

5. Область видимости

В базовом языке существует два основных вида области видимости (scope): локальная область видимости и область видимости файла. Локальная область видимости относится к блоку. Тело функции — это пример блока; оно содержит набор объявле­ний, включая параметры функции. В область видимости файла входят имена, кото­рые являются внешними (глобальными). Правила для области видимости класса мы обсудим позднее.

Основное правило области видимости состоит в том, что идентификаторы дос­тупны только внутри блока, в котором они объявлены. Они не известны за граница­ми блока. Например:

int a = 2; //а вне блока

cout « a << endl; //напечатается 2

{ //вход во внутренний блок

int а = 7 ; //а внутри блока

cout « а « endl; //напечатается 7

} //выход из внутреннего блока

cout « ++а « endl; //напечатается 3 }

Внешнее по отношению к блоку имя действительно до тех пор, пока оно не переопределено внутри блока. Если оно переопределено, то внешнее имя скрывается от внутреннего блока. В C++ объявления могут встречаться в любом месте блока. Область видимости идентификатора начинается сразу после его объявления и продолжается до конца самого внутреннего блока, в котором он объявлен.

  1. Операции и выражения

Во всех языках программирования под выражением подразумева­ется конструкция, составленная из констант, переменных, знаков операций, функций, скобок.

Напомним, что операция, при­меняемая к одному операнду, называется унарной, а операция с двумя операндами — бинарной.

Арифметические операции. К арифметическим операциям отно­сятся:

- вычитание или унарный минус; + сложение или унарный плюс;

* умножение; / деление; % деление по модулю (аналог Mod в Паскале); ++ унарная операция увеличения на единицу (инкремент); унарная операция уменьшения на единицу (декремент).

Все операции, кроме деления по модулю, применимы к лю­бым числовым типам данных. Операция % применима только к целым числам.

Рассмотрим особенности выполнения операции деления. Если делимое и делитель — целые числа, то и результат — целое число.

Операции инкремента и декремента. Операция ++ увеличивает значение переменной на единицу,

операция - - умень­шает значение переменной на единицу. Оба знака операции могут записываться как перед операндом (префиксная форма), так и после операнда (постфиксная форма), например: ++х или х++, - -а или а- -.

пример:

а=3; b=2; с=а++*b++;

В результате выполнения переменные примут етедующие зна­чения: а =4, b = 3, с= 6. Второй пример:

а=3; b=2; с=++а*++Ь;

Результаты будут такими: а = 4, b = 3 , с = 12.

Одинаковые по старшинству операции выполняются в порядке слева направо. Как и в Паскале, для изменения порядка выполне­ния операций в выражениях могут применяться круглые скобки.

Операции отношения. <, >, <=, >=, ==, !=

Hезультатом операции отношения является целое число: если отношение истинно — то 1, если ложно — то 0. Примеры отношений

Логические операции. Три основные логические операции в языке Си записываются иначе, чем в Паскале.

! операция отрицания (НЕ),

&& конъюнкция, логическое умножение (И),

I | дизъюнкция, логическое сложение (ИЛИ).

Правила их выполнения определяются таблицей истинности (см. табл. 3.5).

Операция присваивания. То, что присваивание в Си является операцией, а не оператором, оказывается, наверное, самой боль­шой неожиданностью для знатоков Паскаля. А между тем это дей­ствительно так! Знак операции присваивания =. Следствием отме­ченного факта является то, что присваивание, как любой другой знак операции, может несколько раз входить в выражение. На­пример:

а=b=с=х+у;

Операция присваивания — правоассоциативная. Это значит, что несколько подряд расположен­ных присваиваний выполняются справа налево. Поэтому в приве­денном выше выражении первой выполнится операция сложе­ния, затем переменной с присвоится значение суммы, затем это значение присвоится переменной b и в конце — переменной а.

Операции присваивания, совмещающие присваивание с выполнением других операций: +=, -=, /=, *=, %=. Приоритет у них такой же, как и у простого присваивания. Примеры использования этих операций:

а+=2 эквивалентно а=а+2,

Заметим, что вместо выражения а=а+2 предпочтительнее пи­сать в программе а+=2, поскольку второе выражение будет вы­числяться быстрее.

Операция явного преобразования типа (операция «тип»). Приме­нение этой операции имеет следующий формат:

(имя_типа) операнд

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

(long)8, (float)I, (int)x%2

Операция sizeof. Эта операция имеет две формы записи:

sizeof(тип) и sizeof(выражение)

Результатом операции является целое число, равное количе­ству байтов, которое занимает в памяти величина явно указан­ного типа или величина, полученная в результате вычисления выражения.

sizeof (int) результат — 2

Операция «запятая». Эта необычная операция используется для связывания нескольких выражений в одно. Несколько выражений, разделенных запятыми, вычисляются последовательно слева на­право. В качестве результата такого совмещенного выражения при­нимается значение самого правого выражения. Например, если переменная х имеет тип int, то значение выражения (Х=3, 5*Х) будет равно 15, а переменная х примет значение 3.

Операция «условие ?:». Это единственная операция, которая име­ет три операнда. Формат операции:

выражение1 ? выражение2 : выражениеЗ

Данная операция реализует алгоритмическую структуру ветв­ления. Алгоритм ее выполнения следующий: первым вычисляется значение выражения 1, которое обычно представляет собой некоторое условие. Если оно истинно, т.е. не равно 0, то вычисляется выражение 2 и полученный результат становится результатом опе­рации. В противном случае в качестве результата берется значение выражения 3.

Пример 3. Заменить большее значение из двух переменных а и b на единицу:

(a>b)?a:b=l;

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

Операции ( ) и [ ]. В языке Си круглые и квадратные скобки рассматриваются как операции, причем эти операции имеют наи­высший приоритет.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]