ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 3) онлайн
Целые величины в качестве булевых
Из всего вышесказанного у вас могло сложиться впечатление, что для того, что- бы выражение имело истинное или ложное значение, необходимо, чтобы это вы- ражение включало в себя операцию отношения. На самом деле любое выражение целого типа можно рассматривать как истинное или ложное, даже если это выра- жение является обычной переменной. Выражение x рассматривается как истин- ное в том случае, если его значение не равно нулю, и как ложное, если его значе-
ние равно нулю. Очевидно, что в этом случае выражение !x истинно, если x равен нулю, и ложно, если x не равен нулю.
Давайте применим описанную концепцию на практике. Пусть в нашей при- ключенческой игре появятся грибы, причем расти они будут в тех точках, где обе координаты, x и y, будут кратны 7 (в приключенческих играх грибы, найден- ные героем, придают ему различные сверхъестественные возможности). Как мы знаем, кратность x числу 7 равносильна тому, что остаток от деления x на 7 равен нулю. Таким образом, применяя операцию остатка от деления, можно записать условие, определяющее местоположение грибов:
if ( x%7==0 && у%7==0 ) cout << "Здесь находится гриб.\n";
С учетом того, что выражения могут рассматриваться как истинные или лож- ные без применения операций отношения, мы можем записать условие, стоящее в первой строке, более кратко следующим образом:
if ( !(x%7) && !(у%7) ) // если x%7 равно 0 и у%7 равно 0
Как мы говорили, логические операции && и || имеют более низкий приори- тет, чем операции отношения. В таком случае зачем мы ставим скобки вокруг x%7 и у%7? Мы делаем это потому, что, несмотря на принадлежность операции ! к логическому типу, эта операция является унарной и имеет более высокий приоритет, чем бинарные операции отношения.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
