Как сделать оператор c

Обновлено: 07.07.2024

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

Различают операторы объявления имен, операторы управления и операторы-выражения.

Операторы-выражения

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

Переменной a присваивается значение 1 , переменной b – значение 3 . Затем вызывается функция max с параметрами 1 и 3 , и ее результат присваивается переменной m .

Как мы уже отмечали, присваивание – необязательная операция в операторе-выражении. Следующие операторы тоже вполне корректны:

Объявления имен

Эти операторы объявляют имена , т.е. делают их известными программе. Все идентификаторы или имена, используемые в программе на языке Си++, должны быть объявлены.

Оператор объявления состоит из названия типа и объявляемого имени:

Оператор объявления заканчивается точкой с запятой.

Операторы управления

Операторы управления определяют, в какой последовательности выполняется программа. Если бы их не было, операторы программы всегда выполнялись бы последовательно, в том порядке, в котором они записаны.

Условные операторы

Условные операторы позволяют выбрать один из вариантов выполнения действий в зависимости от каких-либо условий. Условие – это логическое выражение, т.е. выражение, результатом которого является логическое значение true (истина) или false (ложь).

Оператор if выбирает один из двух вариантов последовательности вычислений.

Если условие истинно, выполняется оператор1 , если ложно, то выполняется оператор2 .

В данном примере переменной a присваивается значение максимума из двух величин x и y .

Конструкция else необязательна. Можно записать:

В данном примере оператор x = -x; выполняется только в том случае, если значение переменной x было отрицательным. Присваивание переменной abs выполняется в любом случае. Таким образом, приведенный фрагмент программы изменит значение переменной x на его абсолютное значение и присвоит переменной abs новое значение x .

Если в случае истинности условия необходимо выполнить несколько операторов, их можно заключить в фигурные скобки:

Условный оператор можно расширить для проверки нескольких условий:

Конструкций else if может быть несколько.

Хотя любые комбинации условий можно выразить с помощью оператора if , довольно часто запись становится неудобной и запутанной. Оператор выбора switch используется, когда для каждого из нескольких возможных значений выражения нужно выполнить определенные действия. Например, предположим, что в переменной code хранится целое число от 0 до 2 , и нам нужно выполнить различные действия в зависимости от ее значения:

В зависимости от значения code управление передается на одну из меток case . Выполнение оператора заканчивается по достижении либо оператора break , либо конца оператора switch . Таким образом, если code равно 1 , выводится " код один ", а затем переменная y увеличивается на единицу. Если бы после этого не стоял оператор break , то управление "провалилось" бы дальше, была бы выведена фраза " код два ", и переменная z тоже увеличилась бы на единицу.

Если значение переключателя не совпадает ни с одним из значений меток case , то выполняются операторы, записанные после метки default . Метка default может быть опущена, что эквивалентно записи:

Очевидно, что приведенный пример можно переписать с помощью оператора if :

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

Операторы цикла

Предположим, нам нужно вычислить сумму всех целых чисел от 0 до 100 . Для этого воспользуемся оператором цикла for :

Оператор цикла состоит из заголовка цикла и тела цикла. Тело цикла – это оператор, который будет повторно выполняться (в данном случае – увеличение значения переменной sum на величину переменной i ). Заголовок – это ключевое слово for , после которого в круглых скобках записаны три выражения, разделенные точкой с запятой. Первое выражение вычисляется один раз до начала выполнения цикла. Второе – это условие цикла. Тело цикла будет повторяться до тех пор, пока условие цикла истинно. Третье выражение вычисляется после каждого повторения тела цикла.

Оператор for реализует фундаментальный принцип вычислений в программировании – итерацию. Тело цикла повторяется для разных, в данном случае последовательных, значений переменной i . Повторение иногда называется итерацией. Мы как бы проходим по последовательности значений переменной i , выполняя с текущим значением одно и то же действие, тем самым постепенно вычисляя нужное значение. С каждой итерацией мы подходим к нему все ближе и ближе. С другим принципом вычислений в программировании – рекурсией – мы познакомимся в разделе, описывающем функции.

Любое из трех выражений в заголовке цикла может быть опущено (в том числе и все три). То же самое можно записать следующим образом:

Заметим, что вместо одного оператора цикла мы записали несколько операторов, заключенных в фигурные скобки – блок. Другой вариант:

В последнем примере мы опять встречаем оператор break . Оператор break завершает выполнение цикла. Еще одним вспомогательным оператором при выполнении циклов служит оператор продолжения continue . Оператор continue заставляет пропустить остаток тела цикла и перейти к следующей итерации (повторению). Например, если мы хотим найти сумму всех целых чисел от 0 до 100 , которые не делятся на 7 , можно записать это так:

Еще одно полезное свойство цикла for : в первом выражении заголовка цикла можно объявить переменную. Эта переменная будет действительна только в пределах цикла.

Другой формой оператора цикла является оператор while . Его форма следующая:

Условие – как и в условном операторе if – это выражение, которое принимает логическое значение "истина" или "ложь". Выполнение оператора повторяется до тех пор, пока значением условия является true (истина). Условие вычисляется заново перед каждой итерацией. Подсчитать, сколько десятичных цифр нужно для записи целого положительного числа N , можно с помощью следующего фрагмента:

Третьей формой оператора цикла является цикл do while . Он имеет форму:

Отличие от предыдущей формы цикла while заключается в том, что условие проверяется после выполнения тела цикла. Предположим, требуется прочитать символы с терминала до тех пор, пока не будет введен символ "звездочка".

В операторах while и do также можно использовать операторы break и continue .

Как легко заметить, операторы цикла взаимозаменяемы. Оператор while соответствует оператору for :

Пример чтения символов с терминала можно переписать в виде:

Разные формы нужны для удобства и наглядности записи.

Оператор возврата

Оператор return завершает выполнение функции и возвращает управление в ту точку, откуда она была вызвана. Его форма:

Где выражение – это результат функции. Если функция не возвращает никакого значения, то оператор возврата имеет форму

Оператор перехода

Последовательность выполнения операторов в программе можно изменить с помощью оператора перехода goto . Он имеет вид:

Метка ставится в программе, записывая ее имя и затем двоеточие. Например, вычислить абсолютную величину значения переменной x можно следующим способом:

При выполнении goto вместо следующего оператора выполняется оператор, стоящий после метки positiv . Если значение x положительное, оператор x = - x выполняться не будет.

В настоящее время считается, что оператор goto очень легко запутывает программу. Без него, вообще говоря, можно обойтись, поэтому лучше его не использовать, ну разве что лишь в самом крайнем случае.

Это функция вычисления факториала. Первый оператор в ней – это объявление переменной k , в которой будет храниться результат вычисления. Затем выполняется условный оператор if . Если n равно единице, то вычисления факториала закончены, и выполняется оператор-выражение, который присваивает переменной значение 1 . В противном случае выполняется другой оператор-выражение.

Перегрузка операторов в C++. Операторная функция. Ключевое слово operator . Перегрузка базовых арифметических операторов + , – , * , / . Примеры реализации встроенных операторных функций

Перед рассмотрением данной темы рекомендуется ознакомиться со следующей темой:

Содержание

  • 1. Что такое унарные и бинарные операторы?
  • 2. В чем состоит суть перегрузки операторов? Что такое операторная функция?
  • 3. Какими способами можно реализовать операторную функцию для заданного класса? Какие существуют разновидности операторных функций?
  • 4. Общая форма операторной функции, которая реализована в классе. Ключевое слово operator
  • 5. Пример перегрузки унарных и бинарных операторов для класса, который содержит одиночные данные. Операторная функция реализована внутри класса
  • 6. Пример перегрузки оператора ‘ * ‘, обрабатывающего класс, который содержит массив вещественных чисел. Операторная функция реализована внутри класса
  • 7. Пример суммирования двух массивов. Операторная функция operator+() размещается внутри класса
  • 8. Какие ограничения накладываются на перегруженные операторы?
  • 9. Какие операторы нельзя перегружать?
  • 10. Объекты каких типов может возвращать операторная функция? Примеры операторных функций, которые возвращают объекты разных типов
  • 11. Можно ли изменять значения операндов в операторной функции?
  • 12. Можно ли реализовать операторные функции в классе, которые перегружают одинаковый оператор, получают одинаковые параметры но возвращают разные значения?
  • 13. Можно ли реализовать две и более операторных функции в классе, которые перегружают одинаковый оператор и получают разные (отличные между собой) параметры?

Поиск на других ресурсах:

1. Что такое унарные и бинарные операторы?

Различают три основных вида операторов: унарные, бинарные и n -арные ( n >2).

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

Примеры унарных операторов:

Бинарные операторы – это операторы, которые для вычисления требуют двух операндов.

Пример. Ниже отображены фрагменты выражений с бинарными операторами + , – , % , *

n -арные операторы для вычислений требуют более двух операндов. В языке C++ есть тернарная операция ?: , которая для своей работы требует три операнда. Более подробно об этой тернарной операции ?: описывается здесь.

2. В чем состоит суть перегрузки операторов? Что такое операторная функция?

лучше вызвать более естественном способом:

В данном примере оператор ‘+’ считается перегруженным.

3. Какими способами можно реализовать операторную функцию для заданного класса? Какие существуют разновидности операторных функций?

Для заданного класса операторную функцию в классе можно реализовать:

4. Общая форма операторной функции, которая реализована в классе. Ключевое слово operator

Общая форма операторной функции, реализованной в классе, имеет следующий вид:

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

Объявляется класс Point , реализующий точку на координатной плоскости. В классе реализованы:

  • две внутренние переменные x , y , которые есть координатами точки;
  • два конструктора класса;
  • методы доступа к внутренним переменным класса GetX() , GetY() , SetX() , SetY() ;
  • две операторные функции operator+() и operator-() .

Как видно из вышеприведенного кода, операторная функция operator+() получает один параметр. Это значит, что эта функция реализует бинарный оператор ‘+’ . Этот параметр соответствует операнду, который размещается в правой части бинарного оператора ‘+’ . Операнд, который размещается в левой части оператора ‘+’ передается операторной функции неявно с помощью указателя this данного класса.
Вызов операторной функции осуществляет объект, который размещается в левой части оператора присваивания.
Демонстрация использования перегруженных операторов класса Point в другом методе:

В вышеприведенном коде, в операции суммирования ‘+’ объект P1 вызывает операторную функцию. То есть, фрагмент строки

Реализовать операторную функцию operator+() в классе можно и по другому

В вышеприведенной функции в операторе return создается временный объект путем вызова конструктора с двумя параметрами, реализованного в классе. Если (в данном случае) из тела класса убрать конструктор с двумя параметрами

что значит: нет метода (конструктора) Point::Point() принимающего 2 аргумента.

6. Пример перегрузки оператора ‘*’ , обрабатывающего класс, который содержит массив вещественных чисел. Операторная функция реализована внутри класса

В примере реализуется операторная функция operator*() , которая умножает поэлементно значения внутренних массивов объектов класса ArrayFloat . Если размер массивов неодинаков, то умножается только то число элементов, которое есть минимальным между двумя размерами массивов.

Использование класса ArrayFloat в другом методе

7. Пример суммирования двух массивов. Операторная функция operator+() размещается внутри класса

Задан класс ArrayFloat , реализующий динамический массив чисел типа float . В классе реализованы:

  • внутренние переменные size , A , описывающие размер массива и сам массив;
  • два конструктора, инициализирующие начальными значениями элементы массива;
  • конструктор копирования;
  • методы доступа GetSize() , SetSize() , GetAi() , SetAi() , которые реализуют доступ к внутренним переменным массива с соответствующими операциями (выделение памяти, проверка на допустимые границы);
  • операторная функция operator=() , которая реализует копирование объектов;
  • операторная функция operator+() , которая реализует перегрузку оператора ‘+’ для массивов типа ArrayFloat . Операторная функция добавляет поэлементно значения массивов, которые являются операндами операции ‘+’ .
  • деструктор.

Ниже продемонстрировано использование класса ArrayFloat и операторной функции operator+() этого класса.

8. Какие ограничения накладываются на перегруженные операторы?

На использование перегруженных операторов накладываются следующие ограничения:

  • при перегрузке оператора нельзя изменить приоритет этого оператора;
  • нельзя изменить количество операндов оператора. Однако, в коде операторной функции можно один из параметров (операндов) не использовать;
  • нельзя перегружать операторы :: , . , * , ?: ;
  • нельзя вызвать операторную функцию с аргументами по умолчанию. Исключение – операторная функция вызова функции operator()() .
9. Какие операторы нельзя перегружать?

Нельзя перегружать следующие операторы:

  • :: – расширение области видимости;
  • . (точка) – доступ к члену структуры или класса;
  • * – доступ по указателю;
  • ?: – тернарная операция.
10. Объекты каких типов может возвращать операторная функция? Примеры операторных функций, которые возвращают объекты разных типов

Операторная функция может возвращать объекты любых типов. Наиболее часто операторная функция возвращает объект типа класса, в котором она реализованная или с которыми она работает.

Пример. Задан класс Complex , в котором перегружаются два оператора:

  • унарный оператор ‘+’ , возвращающий модуль комплексного числа (тип double );
  • бинарный оператор ‘+’ , возвращающий сумму комплексных чисел. Операторная функция возвращает объект типа Complex ;
  • бинарный оператор ‘+’ , который добавляет к комплексному числу некоторое вещественное число. В этом случае операторная функция получает входным параметром вещественное число и возвращает объект типа Complex .

Текст класса следующий:

Далее демонстрируется использование класса Complex и перегруженных операторных функций в некотором другому методе

11. Можно ли изменять значения операндов в операторной функции?

Да, можно. Однако такие действия не являются полезными с точки зрения здравого смысла. Так, например, операция умножения

не изменяет значения своих операндов 6 и 9. Результат равен 54. Если операторная функция operator*() будет изменять значения своих операндов, то это может привести к невидимым ошибкам в программах, поскольку программист по привычке, будет считать, что значения операндов есть неизменными.

12. Можно ли реализовать операторные функции в классе, которые перегружают одинаковый оператор, получают одинаковые параметры но возвращают разные значения?

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

Например. Нельзя в классе перегружать оператор ‘+’ так как показано ниже

Это правило касается любых функций класса.

13. Можно ли реализовать две и более операторных функции в классе, которые перегружают одинаковый оператор и получают разные (отличные между собой) параметры?

Да, можно. В п. 10 реализован класс Complex , в котором реализованы две операторные функции, которые перегружают оператор ‘+’ разными способами. Эти функции отличаются входящими параметрами.

После введения в переменные и константы, мы можем начинать работать с ними при помощи операторов. Ниже приведен полный список операторов. На данный момент, вполне вероятно, не обязательно знать их все, но они все перечислены здесь в качестве ссылки.

Оператор присваивания (=)

Оператор присваивания присваивает значение переменной.

Это выражение присваивает целочисленное значение 5 переменной x. Операция присваивания всегда производится справа налево, а не наоборот:

Это выражение присваивает переменной x значение, содержащееся в переменной y. Значение x в момент перемещения теряется и замещается значением y.

Учтите, что мы присваиваем значение y переменной x только в момент операции присваивания. Поэтому, если y изменится позже, это не повлияет на новые значения, принятые x.

Например, давайте взглянем на следующий код - в нем содержится эволюция данных, хранящихся в переменных, аналогично комментариям:

Эта программа выводит на экран последние значения a и b (4 и 7, соответственно). Заметьте, что последняя модификация b не повлияла на a, хотя мы объявили a = b ранее.

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

В этом выражении переменной y присваивается результат сложения 2 и значение другой операции присваивания (собственное значение которой 5). Это примерно эквивалентно:

С финальным результатом присваивания 7 переменной y.

Следующее выражение также корректно в C++:

Здесь присваивается 5 всем трем переменным: x, y и z; всегда справа-налево.

Арифметические операторы ( +,-,*,/,% )

C++ поддерживаются пять арифметических операций:

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

в результате в переменной x содержится значение 2, т.к результат деления от 11 на 3 равен 3 с остатком 2.

Составное присваивание (+=, -=, *=, /=, %=, >>=,

Составные операторы присваивания изменяют текущее значение переменной, производя операцию над ней. Они эквивалентны присваиванию результата операции первому операнду:

и то же самое для всех остальных составных операторов присваивания. Например:

Инкремент и декремент ( ++, -- )

Многие выражения могут быть сильно сокращены: операторы инкремента (++) и декремента (--) увеличивают или уменьшают на 1 значение, хранимое в переменной. Они эквивалентны +=1 и -=1 соответственно.

Три эти выражения полностью эквивалентны в своей функциональности; каждое из них увеличивает на единицу значение x.

Ранние компиляторы C могли создавать различный исполняемый код в зависимости от того, какое из этих выражений используется. В наше время этот вид оптимизации кода обычно выполняется автоматически компилятором, таким образом, эти три выражения должны произвести точно такой же исполняемый код.

Особенностью этого оператора является то, что он может использоваться как префикс и как суффикс. Это означает, что оно может быть написано как перед именем переменной (++x), так и после него (x++). Несмотря на то, что в простых выражениях как x++ или ++x они равнозначны, в других выражениях, в которых результат инкремента или декремента используется, они могут иметь важный различия в значении: в случае, когда оператор инкремента используется как префикс (++x) значения, выражение принимает конечное значение уже после того, как операция инкремента совершена. С другой стороны, в случае, когда он используется как суффикс (x++), значение x также увеличится, но выражение примет значение прежде, чем это произойдет. Заметьте разницу:

Пример 1 Пример 2
x = 3;
y = ++x;
// x содержит 4, y содержит 4
x = 3;
y = x++;
// x содержит 4, y содержит 3

В Примере 1 значение, присваиваемое y, это значение x после инкремента, в то время как в Примере 2 это значение, которое содержалось в x до инкремента.

Операторы отношения и сравнения ( ==, !=, >, =,

Два выражения можно сравнить с использованием операторов отношения или равенства. Например, чтобы узнать, что два значения равны или одно больше другого.

Результат такой операции может принимать значение true или false (т.е. Булево значение).

Операции отношения в C++ это:

оператор описание
== равно
!= не равно
больше
= больше или равно

Здесь представлены некоторые примеры:

Конечно, сравнивать можно не только числовые константы, но и другие значения, включая переменные.

Предположим, что a=2, b=3 и c=6, тогда:

Будьте осторожны! Оператор присваивания (operator=, с одним знаком =) это не то же самое, что оператор равенства (operator==, с двумя знаками =); первый из них (=) присваивает значение, стоящее справа от него переменной, находящейся слева, в то время как другой (==) сравнивает значения с двух сторон оператора на равенство. Поэтому в последнем выражении ((b=2) == a), мы сначала присвоили значение 2 переменной b, а затем сравнили его с a, которая также содержала значение 2, и получили true.

Логические операторы ( !, &&, || )

Оператор ! - это оператор C++ для логической операции НЕ. Он имеет только один операнд справа, и инвертирует его, возвращая false, если его операнд имеет значение true и наоборот. Он возвращает противоположное логическое значение своего операнда. Например:

Логические операторы && и || используются при оценке двух выражений для получения результата, зависящего от значений этих выражений. Оператор && соответствует логической операции И, которая возвращает значение true, если оба его операнда истинны, и false в противном случае. В таблице показан результат применения оператора &&:

ОПЕРАТОР && (И)
a b a && b
true true true
true false false
false true false
false false false

Оператор || соответствует логической операции ИЛИ, которая возвращает true, если любой из ее операндов равен true, поэтому принимает значение false, только если оба операнда равны false. Ниже приведена таблица для a || b:

ОПЕРАТОР || (ИЛИ)
a b a || b
true true true
true false true
false true true
false false false

При использовании логических операторов C++ оценивает только то, что необходимо, слева-направо для получения итогового результата, игнорируя остальное. Поэтому в последнем примере ((5==5)||(3>6)) C++ проверяет, истинно ли 5==5, и если это так, то значение 3>6 не проверяется. Это известно как укороченная оценка и для этих операторов работает так:

оператор укороченная оценка
&& Если левостороннее выражение равно false, итоговый результат равен false (правостороннее выражение не оценивается)
|| Если левостороннее выражение равно true, итоговый результат равен true (правостороннее выражение не оценивается)

Это особенно важно, когда правое выражение имеет побочные эффекты, такие как изменение значений:

Здесь комбинированное условное выражение увеличивает i на единицу, но только если условие слева от && истинно, иначе условие справа (++ i

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

condition ? result1 : result2

Если condition истинно, все выражение оценивается как result1, иначе как result2.

В этом примере, a равно 2, и b равно 7, так что оцениваемое выражение (a>b) не было истинным, таким образом, первое значение, указанное после вопросительного знака, было отброшено в пользу второго значения (указанного после двоеточия), которым является b (со значением 7).

Оператор запятая ( , )

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

Например, следующий код:

сначала присваивает значение 3 переменной b, а затем присваивает b + 2 переменной a. Таким образом, в конце переменная a будет содержать значение 5, а переменная b будет содержать значение 3.

Побитовые операторы ( & , | , ^ , ~ , > )

Побитовые операторы модифицируют переменные, учитывая битовые шаблоны, которые представлены значениями, хранимыми в этих переменных.

оператор эквивалент asm описание
& AND побитовый И
| OR побитовый включающий ИЛИ
^ XOR побитовый исключающий ИЛИ
~ NOT унарное дополнение (битовая инверсия)
> SHR сдвиг бит вправо

Оператор явного приведения типа

Операторы преобразования типов позволяют преобразовывать значение заданного типа в другой тип. Есть несколько способов сделать это на C ++. Самый простой, который был унаследован от языка C, это предварять выражение, которое должно быть преобразовано, новым типом, заключенным в круглые скобки (()):

Предыдущий код преобразует число с плавающей точкой 3.14 в целое значение (3); Остаток теряется. Здесь оператором приведения типа является (int). Еще один способ сделать то же самое в C ++ - использовать функциональную нотацию, предваряя выражение, которое нужно преобразовать, типом и заключая выражение в круглые скобки:

Оба способа приведения типов корректны в C++.

sizeof

Этот оператор принимает один параметр, который может быть типом или переменной, и возвращает размер в байтах этого типа или объекта:

Здесь переменной x присваивается значение 1, потому что char - это тип размером в один байт. Значение, возвращаемое sizeof, является константой времени компиляции, поэтому оно всегда определяется перед выполнением программы.

Другие операторы

Позже в этом руководстве мы увидим еще несколько операторов, подобных тем, которые относятся к указателям или специфике объектно-ориентированного программирования.

Приоритет операторов

Одно выражение может иметь несколько операторов. Например:

В C ++ вышеуказанное выражение всегда присваивает значение 6 переменной x, поскольку оператор % имеет более высокий приоритет, чем оператор +, и всегда вычисляется раньше. Части выражений могут быть заключены в круглые скобки, чтобы переопределить этот порядок приоритетов или явно очистить предполагаемый эффект. Обратите внимание на разницу:

Операторы C ++ оцениваются в следующем порядке от наивысшего к наименьшему:

Как вы уже знаете, программа представляет собой последовательность инструкций, выполняемых компьютером для реализации определенных задач. Все созданные вами до сих пор простые программы на C++ выполняли операторы по порядку, начиная с первого до конца программы. По мере усложнения программ вам потребуется, чтобы выполнялся один набор операторов, если определенное условие соблюдается, и другой набор, если условие не соблюдается. Другими словами, вам потребуется, чтобы ваши программы приняли решение и соответственно отреагировали. В этом уроке описывается оператор C++ if, который будет использоваться вашей программой для принятия подобных решений. К концу данного урока вы освоите следующие основные концепции:

  • Программы на C++ используют операции сравнения, чтобы определить, равны ли два значения или одно значение больше или меньше другого.
  • Для принятия решений используется оператор C++ if.
  • Операторы C++ могут быть простыми (одна операция) илисоставными (несколько операций, сгруппированных внутри правой и левой фигурных скобок <>).
  • Ваши программы используют оператор C++ if-else для выполнения одного набора операторов, если определенное условие соблюдается, и другого набора операторов, если условие не соблюдается.
  • Комбинируя несколько операторов if-else, программы могут проверять несколько условий.
  • Используя логические операторы C++ И и ИЛИ, ваши программы могут проверить несколько условий, например: Есть ли у пользователя собака И долматин ли это ?

Программы, которые принимают решения, выполняют условную обработку. Другими словами, на основании результата одного или нескольких Условий программа будет выполнять определенные операторы. Экспериментируйте с программами данного урока; ваш набор инструментальных средств C++ уже достаточно обширен для создания полезных программ.

СРАВНЕНИЕ ДВУХ ЗНАЧЕНИЙ

Когда ваши программы принимают решение, они обычно выполняют некоторый вид проверки. Например, одна программа может проверять, равны ли тестовые очки студента 100, а вторая программа — составляет ли стоимость покупки больше $50.00. Для выполнения подобных проверок ваши программы будут использовать операции сравнения C++, перечисленные в табл. 7.1. Операции сравнения позволяют проверять, каким образом одно значение соотносится с другим. Другими словами, используя операции сравнения, программы могут проверить, больше одно значение, меньше или равно другому.

Таблица 7.1. Операции сравнения C++.

Операция Проверка Пример
== Если два значения равны (score == 100)
!= Если два значения не равны (old != new)
> Если первое значение больше второго (cost > 50.00)
Если первое значение меньше второго (salary
>= Если первое значение больше или равно второму (stock_price >= 30.0)
Если первое значение меньше или равно второму (age

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

ЗНАКОМСТВО С ОПЕРАТОРОМ if

Оператор C++ if позволяет вашим программам осуществлять проверку и затем на основании этой проверки выполнять операторы. Формат оператора if следующий:

Представление о простых и составных операторах

При использовании оператора if для условной обработки в некоторых случаях, если условие истинно, программе потребуется выполнить один оператор, а в других случаях несколько операторов. Когда программа выполняет только один оператор, следующий за if, такой оператор называется простым оператором:

if (test_score >= 90) cout Простой оператор

Если программе необходимо выполнить несколько инструкций, когда результат сравнения — истина, операторы должны быть сгруппированы внутри левой и правой фигурных скобок <>. Операторы, которые находятся внутри фигурных скобок, образуют составной оператор, как показано ниже:

if (test_score >= 90)

cout Составной оператор

Использование простых и составных операторов

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

ОПЕРАТОР else

Следующая программа IF_ELSE.CPP использует оператор if, чтобы проверить, больше тестовые очки или равны 90. Если условие истинно, программа выводит поздравление. Если условие ложно, программа сообщает, что студент должен работать усерднее:

ПРИМЕНЕНИЕ СОСТАВНЫХ ОПЕРАТОРОВ ДЛЯ else

Как вы уже знаете, составной оператор представляет собой группу связанных операторов, заключенных между левой и правой фигурными скобками. Когда программа использует else для указания операторов, выполняющихся, если условие ложно, то для указания нескольких операторов можно использовать составной оператор. Следующая программа CMP_ELSE.CPP использует составные операторы как для if,так и для else:

Откомпилируйте и запустите эту программу. Вы увидите, что при комбинации операций ввода с условной обработкой ваши программы станут более совершенными.

Представление об if-else

По мере усложнения ваши программы будут проверять разные условия и выполнять один набор операторов, если условие истинно, и другой набор, если условие ложно. Для выполнения такой условной обработки программы используют операторы if-else, как показано ниже:

if (условие_истинно)
оператор;
else
оператор;

Когда программе требуется выполнить несколько операторов, если условие ложно или истинно, вы должны сгруппировать связанные операторы внутри левой и правой фигурных скобок <>:

if (условие_истинно)

первый_оператор_для_истины;
второй_оператор_для_истины;
>
else
первый_оператор_для_лжи;
второй_оператор_для_лжи;
>

ИСПОЛЬЗОВАНИЕ ОТСТУПОВ ДЛЯ УЛУЧШЕНИЯ УДОБОЧИТАЕМОСТИ ВАШЕЙ ПРОГРАММЫ

Рассматривая программы, представленные в этой главе, вы увидите, что в них применяются отступы перед операторами, которые следуют за if, elseили левой скобкой. Сдвигая подобным образом свои операторы на одну или две позиции, вы упрощаете процесс чтения ваших программ, выделяя связанные группы операторов, как показано ниже:

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

ПРОВЕРКА ДВУХ ИЛИ БОЛЕЕ УСЛОВИЙ

Как вы уже знаете, оператор if позволяет программам проверять определенные условия. По мере усложнения ваших программ возникает необходимость в проверке сразу нескольких условий. Например, программа могла бы проверить, будут ли тестовые очки больше или равны 90, и получит ли студент оценку А. Подобно этому, вы могли бы проверить, есть ли у пользователя собака и долматин ли это. Для выполнения таких проверок можно использовать логическую операцию C++ И (&&). Кроме того, если вы хотите проверить, есть ли у пользователя собака или кошка, вам следует использовать логическую операцию ИЛИ (||). Если программы для проверки нескольких условий используют логические операции И или ИЛИ, поместите каждое условие внутри круглых скобок, как показано ниже:

if ((user_owns_a_dog) && (dog == dalmatian)) //————->Полное условие

Как видите, программа группирует каждое условие внутри своих собственных круглых скобок, которые затем заключаются во внешние круглые скобки.

Когда ваша программа использует логическую операцию И (&&), то результат полного условия является истинным, только если все проверяемые условия истинны. Если какое-либо условие ложно, то полное условие становится ложным. Например, если у пользователя нет собаки, то предыдущее условие является ложным. Подобно этому, если собака пользователя не долматин, условие является ложным. Чтобы условие было истинным, у пользователя должна быть собака и она должна быть породы долматин. Следующий оператор использует логическую операцию ИЛИ (||), чтобы определить, есть ли у пользователя собака или кошка:

При использовании логической операции ИЛИ полное условие будет истинным, если хотя бы одно условие является истинным. Например, если у пользователя есть собака, условие истинно. Если у пользователя есть кошка, условие истинно. Подобно этому, если у пользователя есть и собака, и кошка, условие истинно. Условие будет ложным только в том случае, если у пользователя нет ни собаки, ни кошки.

В C++ истина представляется как ненулевое значение, а ложь как 0

Достоинством C++ является то, что истина представляется как любое ненулевое значение, а ложь как 0. Предположим, ваша программа использует переменную с именем user_owns_a_dog, чтобы определить, есть ли у пользователя собака или нет. Если у пользователя нет собаки, вы можете присвоить этой переменной значение 0 (ложь), как показано ниже:

Если у пользователя есть собака, вы можете присвоить этой переменной любое ненулевое значение, например 1:

Затем ваши программы могут проверить эту переменную, используя оператор if, как показано ниже:

Если переменная содержит ненулевое значение, условие оценивается как истина; в противном случае, если переменная содержит 0, условие ложно. Исходя из того, как C++ представляет истину и ложь, предыдущий оператор идентичен следующему:

Следующая программа DOG_CAT.CPP использует переменныеuser_owns_a_dog и user_owns_a_cat внутри оператора if, чтобы определить, какие животные есть у пользователя.

Экспериментируйте с этой программой, присваивая обоим переменным значение 1 или 0, а затем одной 1, а другой 0 и наоборот. Как видите, проверить два условия очень легко, используя логические операции И и ИЛИ.

Использование операции НЕ в C++

Вы уже знаете, что, когда программа проверяет определенное условие, в ряде случаев она должна выполнить некоторые операторы, если это условие истинно. С другой стороны, вам может потребоваться, чтобы программа выполнила операторы, если условие является не истинным. Операция C++ НЕ — восклицательный знак (!) — позволяет вашим программам проверить, является ли условие не истинным. Например, следующий оператор проверяет, нет ли у пользователя собаки:

Операция НЕ превращает ложь в истину, а истину в ложь. Например, предположим, что у пользователя нет собаки. Следовательно, переменнаяuser_owns_a_dog должна содержать значение 0. Если C++ оценивает условие с Помощью операции НЕ, он использует текущее значение переменной (0) и применяет операцию НЕ. Операция НЕ превращает значение 0 в 1 (истину). Таким образом, полное условие превращается в истину и выполняется соответствующий оператор.

Следующая программа USE_NOT.CPP иллюстрирует использование операции НЕ:

Как и раньше, экспериментируйте со значениями, присваиваемыми переменным user_owns_a_dog и user_owns_a_cat, и обратите внимание на поведение программы. По мере усложнения ваших программ вы будете постоянно использовать операцию НЕ. Например, ваша программа может продолжать повторять обработку, пока не встретит конец файла.

Использование логических операций C++

Если вы указываете условия в программах, то иногда эти условия будут состоять из нескольких частей. Например, ваша программа может проверять, имеет ли служащий почасовую оплату и работал ли он более 40 часов на этой неделе. Если для истинности условия каждая из двух его частей должна быть истиной, вам следует использовать операцию C++ И (&&). При ,использовании операции И группируйте каждое условие внутри круглых скобок, а затем оба условия заключите в еще одну пару круглых скобок, как показано ниже:

if ((employee_pay == hourly) && (employee_hours > 40))
оператор;

Когда необходимо, чтобы условие было истинным, если только одна из его частей истинна, вам следует использовать операцию C++ ИЛИ (|[). Например, следующее условие проверяет, есть ли у пользователя машина или мотоцикл:

if ((vehicle == car) II (vehicle == motorcycle))
оператор;

Как и ранее, программа группирует каждое условие внутри скобок. В ряде случаев вам потребуется, чтобы ваши программы выполняли оператор, если условие является не истинным. В таких случаях следует использовать операцию C++ НЕ (!). Операция НЕ превращает истину в ложь, а ложь в истину.

Операции C++ И, ИЛИ и НЕ представляют собой логические операции.

ОБРАБОТКА НЕСКОЛЬКИХ УСЛОВИЙ

Программы, представленные в этом уроке, использовали if и else, чтобы указать один набор операторов, который программе следует выполнить, если условие истинно, и другой набор операторов, выполняемых, если условие ложно. Однако в некоторых случаях программам потребуется проверить несколько разных условий. Предположим, например, что вашей программе необходимо определить тестовые очки студента. Для этого программа должна проверить, больше тестовые очки или равны 90, 80, 70, 60 и т. д. Следующая программа SHOWGRAD.CPP использует для этого серию операторов if-else:

ИСПОЛЬЗОВАНИЕ ОПЕРАТОРА switch

Как вы уже знаете, комбинируя серии операторов if-else, программы могут проверять несколько условий. В предыдущей программе использовались операторы if-else, чтобы определить, находятся ли тестовые очки в данном диапазоне значений. В тех случаях, когда вашим программам необходимо осуществить проверку определенных значений, они могут использовать оператор C++ switch.

ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ

Из этого урока вы узнали, как использовать оператор C++ if длявыполнения условной обработки, которая позволяет вашим программам принимать собственные решения. Как вы знаете, программы могут использовать оператор if, чтобы выполнить один набор операторов, когда условие истинно, и else для указания операторов, выполняющихся программой, если условие ложно. Из урока 8 вы узнаете, как использовать итеративные операторы C++ для повторения операторов указанное число раз или до тех пор, пока выполняется определенное условие. Например, вы можете повторять один и тот же оператор 100 раз, чтобы прибавить 100 студентам тестовые очки. Однако до изучения урока 8 убедитесь, что вы освоили следующие основные концепции:

Читайте также: