|
Программирование >> Дополнительные возможности наследования
Логическое И Логический оператор И вычисляет два выражения, и если оба выражения возвращают true, то и оператор И также возвращает true. Если правда то, что вы голодны, И правда то, что у вас есть деньги, значит, справедливо и то, что вы можете пойти в супермаркет и купить себе что-нибудь на обед. Например, логическое выражение if ( (X == 5) && (у == 5) ) . возвратит значение true, если и обе переменные - х и у - равны 5. Это же выражение возвратит false, если хотя бы одна из переменных не равна 5. Обратите внимание, что выражение возвращает true только в том случае, если истинны обе его части. Логический оператор И обозначается двумя символами &&. Одиночный символ & соответствует совсем другому оператору, о котором пойдет речь на занятии 21. Логическое ИЛИ Логический оператор ИЛИ также вычисляет два выражения. Если любое из них истинно, то и оператор ИЛИ возвращает true. Если у вас есть деньги ИЛИ у вас есть кредитная карточка, вы можете оплатить счет. При этом нет необходимости в соблюдении двух условий сразу: иметь и деньги, и кредитную карточку. Вам достаточно выполнения одного из них (хотя и то и другое - еще лучще). Например, выражение if ( (X == 5) II (у - 5) ) возвратит значение true, если либо значение переменной х, либо значение переменной у, либо они оба равны 5. Обратите внимание: логический оператор ИЛИ обозначается двумя символами 11. Оператор, обозначаемый одиночным символом , - это совсем другой оператор, о котором пойдет речь на занятии 21. Логическое НЕТ Логический оператор НЕТ возвращает значение true, если тестируемое выражение является ложным (имеет значение false). И наоборот, если тестируемое выражение является истинным, то оператор НЕТ возвратит false! Например, выражение If ( !(х == 5) ) возвратит значение true только в том случае, если х не равно числу 5. Это же выражение можно записать и по-другому: if (х != 5) Вычисление по сокращенной схеме Предположим, компилятору повстречалось следующее логическое выражение: if ( (X == 5) && (у == 5) ) В таком случае компилятор сначала оценит первое выражение (х == 5) и, если оно возвратит false (т.е. х не равно числу 5), не станет вычислять второе выражение (у == 5), поскольку для истинности всего выражения с оператором И нужно, чтобы обе его составляющие были истинными. Аналогично, если компилятору повстречается выражение с оператором ИЛИ if ( (X 5) II (у == 5) ) и первое выражение окажется истинным (х == 5), то компилятор также не станет вычислять второе выражение (у == 5), поскольку ему достаточно одного истинного результата, чтобы признать истинным все выражение. Приоритеты поераторов отношений Операторы отношений и логические операторы используются в выражениях языка С++ и возвращают значения true или false. Подобно всем другим операторам, им присущ некоторый уровень приоритета (см. приложение А), который определяет порядок вычисления операторов отнощений. Этот момент нужно обязательно учитывать при определении значения такого выражения, как if ( X > 5 && у > 5 II 2 > 5) В данном случае о намерениях программиста можно только догадываться. Возможно, он хотел, чтобы это выражение возвращало значение true, если х и у больше 5 или если Z больше 5. С другой стороны, может быть, профаммист хотел, чтобы это выражение возвра1дало true только в том случае, если х больше 5 и либо у, либо г больше 5. Если X равен 3, а у и z оба равны 10, то при использовании первой интерпретации намерений профаммиста это выражение возвратит значение true (z больше 5, поэтому игнорируем значения х и у), но при использовании второй интерпретации вернется: значение false (оно не может дать значение true, поскольку для этого требуется, чтобы значение х было больще 5, а после установления этого факта результат вычисления выражения справа от оператора && не важен, ведь для истинности всего выражения обе его части должны быть истинными). Разобраться в приоритетах операторов в подобных выражениях довольно сложно, поэтому стоит воспользоваться круглыми скобками - ведь с их помощью можно не только изменить последовательность выполнения операторов, обусловленную их приоритетами, но и сделать ясными подобные запутанные выражения: if ( (х > 5) && (у > 5 II Z > 5) ) При использовании предложенных выше значений это выражение возвращает значение false. Поскольку оказалось, что х (его значение равно 3) не больше 5, то выражение слева от оператора И возвращает false, а следовательно, и все выражение целиком тоже возвратит false. Помните, что оператор И возвращает true только в том случае, когда обе части выражения возвращают true. Например, ваш вкус можно считать хорошим только в том случае, если о надетой на вас вещи можно сказать, что она модная и что вам она идет. примечание Часто дополнительные круглые скобки стоит использовать только для четкого определения того, что именно вы хотите сгруппировать. Помните, что цель программиста- написать программу, которая прекрасно работает, а также легко читается и понимается. ПодроОнее оО истине н лжи в языке С++ нуль эквивалентен значению false, а все другие числовые значения эквивалентны значению true. Поскольку любое выражение всегда имеет значение, многие профаммисты пользуются преимуществами этой эквивалентности значений в выражениях условия оператора if. Такое выражение, как if М II если X не равен нулю, то условие истинно X = 0; можно читать следующим образом: если переменная х имеет ненулевое значение, устанавливаем ее равной нулю. Чтобы сделать смысл этого выражения более очевидным, можно записать его так: if (х != 0) если X не нуль X = 0; Оба выражения одинаково правомочны, но последнее понятнее. И еще один момент. Чтобы профамма не превратилась в сплощное щаманство, лучше все-таки проверять истинность некоторых логических условий, а не равенство выражения нулю. Следующие два выражения также эквивалентны: if (!х) истинно, если х равен нулю if (х == 0) если X равен нулю Однако, второе выражение проще для понимания и гораздо очевиднее, поскольку явно проверяется математическое значение переменной х. Рекомендуется Не рекомендуется Используйте круглые скобки, чтобы более четко указать порядок выполнения операторов или изменить их приоритеты. Используйте фигурные скобки в конструкциях с вложенными операторами if, чтобы четко определить взаимосвязи между частями конструкции и избежать ошибок. Не используйте выражение if(x) как эквивалент выражения if(x != 0). Последний вариант предпочтительнее, поскольку четче видна логика проверки условия. Не используйте выражение if(!х) как эквивалент выражения if(x == 0). Последний вариант предпочтительнее, поскольку четче видна лотка проверки условия. Условный оператор Условный оператор (?:) - это единственный оператор в языке С++, который работает сразу с фемя операндами. Синтаксис использования условного оператора следующий: {выражениеТ) ? (выражение2) : (выражениеЗ) Эта сфока читается таким образом: если выражение! возвращает true, то выполняется выражение2, в противном случае выполняется выражениеЗ. Обычно возвращаемое значение присваивается некоторой переменной.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |