ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 3) онлайн
Условия с присваиванием
Можно переписать программу CHCOUNT, сократив ее на одну строку и продемон- стрировав важные аспекты, касающиеся присваивания и старшинства операций. Получившаяся в результате конструкция может показаться необычной, однако на самом деле она часто употребляется не только в C++, но даже в С.
Приведем измененную версию предыдущей программы, названную CHCNT2:
// chcnt2.cpp
// подсчет числа слов и символов в строке
#include <iostream>
using namespace std;
#include <conio.h> // для getche()
int main()
{
int chcount = 0;
int wdcount = 1; // пробел между двумя словами
char ch;
while((ch=getche()) != '\r') // цикл, пока не нажата клавиша Enter
{
if (ch == ' ') // если введен пробел,
wdcount++; // инкрементировать счетчик слов
else // иначе
chcount++; // инкрементировать число символов
} // вывод результатов
cout << "\nСлов: " << wdcount << endl;
cout << "Букв: " << chcount << endl;
return 0;
}
Значение, возвращаемое функцией getche(), присваивается переменной ch, как и раньше, но сама операция присваивания находится прямо внутри условия цикла while. Присвоенное значение сравнивается с '\r' для того, чтобы выяснить, продолжать выполнение цикла или нет. Эта конструкция работает правильно, потому что операция присваивания значения сама получает это значение. Если, к примеру, функция getche() возвращает символ 'a', то при этом не только про- исходит присваивание значения 'a' переменной ch, но само выражение
(ch=getche())
получает значение, равное 'a', которое участвует в проверке.
Тот факт, что операции присваивания имеют собственное значение, приме- няется при множественном присваивании, таком, как
int x,y,z; x=у=z=0;
Подобные конструкции являются абсолютно корректными в C++. Сначала переменной z присваивается значение 0, которое затем присваивается перемен- ной у. После этого выражение y=z=0 получает значение 0, которое присваивается переменной x.
Внешние круглые скобки в выражении (ch=getche())
необходимы, поскольку операция присваивания = имеет более низкий приори- тет, чем операция отношения !=. Если бы скобки отсутствовали, то выражение
while( (ch=getche()) != '\r')
присваивало бы истинное или ложное значение переменной ch, что было бы не- правильно для нашего алгоритма.
Таким образом, оператор while в программе CHCNT2 выполняет много полез- ных действий. Он не только проверяет, является ли значение переменной ch символом '\r', но еще получает символ с клавиатуры и присваивает его перемен- ной ch. Непросто с одного взгляда понять все действия этого оператора.
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
Схожі підручники
- МЕТОДИЧНІ РЕКОМЕНДАЦІЇ ДО ПРОВЕДЕННЯ СЕМІНАРСЬКИХ ЗАНЯТЬ, ОРГАНІЗАЦІЇ І ПРОВЕДЕННЯ САМОСТІЙНОЇ ТА ІНДИВІДУАЛЬНО-КОНСУЛЬТАЦІЙНОЇ РОБОТИ СТУДЕНТІВ
- ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 10) онлайн
- РЕГІОНАЛЬНА ЕКОНОМІКА (частина 3)
- РЕГІОНАЛЬНА ЕКОНОМІКА. Тексти лекцій онлайн (частина 2)
- Теорія Ймовірності основні теми
- ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 5) онлайн
