ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 3) онлайн

Операции отношения

Операция отношения сравнивает между собой два значения. Значения могут быть как стандартных типов языка C++, например char, int или float, так и типов, определяемых пользователем, как мы позже убедимся. Сравнение устанавливает одно из трех возможных отношений между переменными: равенство, больше или меньше. Результатом сравнения является значение истина или ложь. Например, две величины могут быть равны (истина) или не равны (ложь).

Наш первый пример RELAT демонстрирует использование операций сравне- ния применительно к целым переменным и константам.

// relat.cpp

// применение операций отношения #include <iostream> using namespace std;

int main() {

int numb;

cout << "Введите число: "; cin >> numb;

cout << "numb<10 равно " << (numb <10) << endl; cout << "numb>10 равно " << (numb >10) << endl; cout << "numb==10 равно " << (numb ==10) << endl; return 0;

}

Эта программа использует три вида сравнения числа 10 с числом, вводимым пользователем. Если пользователь введет значение, равное 20, то результат ра- боты программы будет выглядеть так:

Введите число: 20 numb<10 равно 0 numb>10 равно 1 numb==10 равно 0

Первое выражение истинно в том случае, если значение numb меньше, чем 10; второе — тогда, когда numb больше, чем 10; и наконец, третье — когда numb рав- но 10. Как можно видеть из результата работы программы, компилятор C++ присваивает истинному выражению значение 1, а ложному — значение 0.

Как мы упоминали в предыдущей главе, стандартный C++ включает в себя тип bool, переменные которого имеют всего два значения: true и false. Возможно, вы подумали о том, что результаты сравнения выражений должны иметь тип bool, и, следовательно, программа должна выводить false вместо 0 и true вместо 1, но C++ интерпретирует true и false именно как 1 и 0. Это отчасти объясняется историческими причинами, поскольку в языке C не было типа bool, и наиболее приемлемым способом представить ложь и истину представлялись именно числа 0 и 1. С введением типа bool два способа интерпретации истинности и ложности объединились, и их можно представлять как значениями true и false, так и зна- чениями 1 и 0. В большинстве случаев не важно, каким из способов пользовать- ся, поскольку нам чаще приходится использовать сравнения для организации циклов и ветвлений, чем выводить их результаты на экран.

Полный список операций отношения в C++ приводится ниже.

Операция          Название

>             больше

<             меньше

==          равно

!=           не равно

>=          больше или равно

<=          меньше или равно

Теперь рассмотрим выражения, использующие операции сравнения, и значе- ния, получающиеся в результате вычисления таких выражений. В первых двух строках примера, приведенного ниже, присваиваются значения переменным harry и jane. Далее вы можете, закрыв комментарии справа, проверить свое умение определять истинность выражений.

jane = 44;            // оператор присваивания

harry = 12;          // оператор присваивания

(jane == harry) // ложь

(harry <= 12)     // истина

(jane > harry)    // истина

(jane >= 44)       // истина

(harry != 12)      // ложь

(7 < harry)          // истина

(0)          // ложь (по определению)

(44)        // истина (поскольку не ноль)

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

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

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

 

3