Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
A.doc
Скачиваний:
36
Добавлен:
09.04.2015
Размер:
5.6 Mб
Скачать

64 Глава 2

ве я расскажу подробнее о порядке выполнения различных операций в выражениях. Общий результат вычисления выражения hours * rate — deductions помещается в переменную netPay.

Знак минус, использованный в последнем операторе, работает с двумя операнда- ми — он вычитает значение правого операнда из значения левого операнда. Он на- зывается бинарной операцией, потому что тут вовлечены два значения. Знак минус также может быть использован с одним операндом — при этом он меняет его знак на противоположный. В этом случае его называют унарной операцией. Вы можете напи- сать следующий код:

Здесь а будет присвоено значение +5, поскольку унарный минус изменил знак опе- ранда b.

Обратите внимание, что присваивание не эквивалентно равенству, как принято в алгебре. Оно специфицирует действие, которое должно быть выполнено, а не кон- статацию факта. Выражение справа от оператора присваивания вычисляется, и ре- зультат сохраняется в lvalue — обычно переменной, которая стоит слева.

Взгляните на приведенный ниже оператор:

Вы можете поупражняться в арифметике на С++, вычисляя, сколько стандартных рулонов обоев понадобится, чтобы обклеить комнату. Следующий пример делает это.

Это значит "прибавить единицу к текущему значению number и затем сохранить результат обратно в number". Если рассматривать это как алгебраическое выражени-е, оно не имеет смысла.

Данные, переменные и вычисления 65

Если только вы не более тренированы в печати на клавиатуре, чем я, то весьма вероятно, что при первой попытке компиляции будут обнаружены некоторые опечат- ки. Когда вы исправите их, программа должна компилироваться и работать успешно. Возможно, вы получите пару предупреждающих сообщений от компилятора. Не бес- покойтесь о них — компилятор просто дает вам возможность убедиться в том, что вы понимаете то, что делаете. Причины сообщений об ошибках я объясню чуть позже.

Описание полученных результатов

Одну вещь хочу подчеркнуть с самого начала — я не несу ответственности за ваш расход обоев, если при расчете вы воспользуетесь этой программой! Как вы увидите, ошибки в расчете необходимого количества рулонов, которое выдаст эта программы, происходят по причине того, как работает С++, и недостаток рулонов для оклейки реальной комнаты может достичь более 50%!

Я разберу по косточкам все операторы этого примера, отмечая интересные, ори- гинальные и даже захватывающие моменты. Операторы, следующие за началом тела функции main (), для вас уже знакомая территория, и я буду исходить из этого.

Стоит отметить пару важных моментов, связанных с композицией программы. Во- первых, операторы в теле main () выровнены так, чтобы их легче было прочесть, и, во-вторых, различные группы операторов разделены пустыми строками, чтобы выде- лить функциональные группы. Смещение вправо (indenting) операторов — это фунда- ментальная техника организации программного кода С++. Вы увидите, что это приме- няется повсеместно для обеспечения визуального выделения различных логических блоков программы.

Модификатор const

В самом начале тела main () находится блок объявлений переменных, используе- мых программой. Эти операторы также уже вам знакомы, но среди них есть два, ко- торые включают в себя нечто новое:

Оба они начинаются с нового ключевого слова — const. Это модификатор типа, указывающий, что переменная не только имеет тип double, но также является кон- стантной. Поскольку вы однозначно сообщаете компилятору, что эти две перемен- ные — константы, он может проверить любой оператор, который попытается из- менить значения этих переменных, и если обнаружит такое, выдаст сообщение об ошибке. Переменная, объявленная как const, не является lvalue, а потому не может помещаться в левой части оператора присваивания.

Вы можете убедиться в этом, добавив в текст программы где-нибудь после объявле- ния rollwidth оператор вроде такого:

rollWidth = 0;