|
Программирование >> Структурное программирование
figll 06.cpp Вывод значения выражения #include <iostream.h> main() cout << 47 плюс 53 равняется ; cout << (47 + 53); выражение cout << endl; It return 0; 4 7 плюс 53 равняется 100 Рис. 11.6. Вывод значения выражения 11.3.2. Сцепление операций поместить в поток и взять из потока Каждая из перегруженных операций и может быть использована в сцепленной форме, как показано на рис. 11. 7. Многократные операции поместить в поток (см. рис. 11.7) выполняются в той последовательности, в которой они записаны : (((cout 47 плюс 53 равняется ) (47 + 53)) << endl); т.е. операция поместить в поток имеет ассоциативность слева направо. Такой способ сцепления операций поместить в поток возможен, поскольку перегруженная операция возвращает ссылку на объект своего левого операнда, т.е. на объект cout. Таким образом, самое левое выражение в скобках (cout 47 плюс 53 равно ) ВЫВОДИТ заданную строку символов и возвращает ссылку на cout. Это приводит к тому, что среднее выражение в скобках должно выполняться как (cout (47 + 53)) выводить целое значение 100 и возвращать ссылку на cout. Затем выполняется самое правое выражение в скобках как cout << endl которое переводит строку, сбрасывает cout и возвращает ссылку на cout. Эта ссылка в данном слзгчае не используется. figll 07.cpp Сцепление перегруженных операций поместить в поток . tinclude <iostream.h> main () ( cout 4 7 плюс 53 равняется (47+53) endl; return 0; 47 плюс 53 равняется 100 Значение строки равно проверка Значение адреса строки (void *) string равно ОхООаа Рис. 11.8. Печать адреса, который хранится в переменной типа char * 11.3.4. Вывод символов с помощью функции-элемента put; сцепленные выводы Функция-элемент put выводит одиночный символ, как, например, в следующем операторе: cout.put(А); который отображает на экране А. Вызовы функции put могут быть сцепленные, как, например, в следующем операторе: cout.put(А).put(\п); Этот оператор выведет на экран букву А, а затем выведет символ новой строки. Как и в случае предыдущий оператор выполняется таким же способом, поскольку оператор точка (.) имеет ассоциативность слева направо, а функция-элемент put возвращает ссылку на объект, из которого функция 11.3.3. Вывод переменных типа char * При написании программы в стиле языка С при вводе-выводе программист должен давать информацию о типе данных. В C-f-f- типы данных определяются автоматически и это является замечательным достижением по сравнению с языком С. Но иногда это вызывает сложности. Например, мы знаем, что символьная строка имеет тип char *. Допустим, что нам необходимо напечатать значения этого указателя, т.е. адрес в памяти первого символа этой строки. Но операция перегружена для печати данные типа char * как строки с нулевым завершающим символом. Решение этой задачи заключается в том, чтобы привести тип этого указателя к типу void * (это следует делать и для любого указателя на переменную, если программист хочет вывести ее адрес). Программа на рис. 11.8 показывает печать переменной char * и как строки, и как адреса. Обратите внимание, что адрес печатается как шестнадцатеричное число (по основанию 16). Шестнадцатеричные числа в С-Н- начинаются с Ох или ОХ. Более подробные сведения о представлении чисел в различных форматах вы найдете в разделах 11.6.1, 11.7.4, 11.7.5 и 11.7.7. fig.ll 08.cpp Печать адреса, хранимого в переменной типа char * #include <iostream.h> main () { char *string = проверка ; cout << Значение строки равно << string << ХпЗначение адреса строки (void *) string равно << (void *) string endl; fogll 09.cpp Вычисление суммы двух целых чисел, которые вводятся с клавиатуры с помощью cin и операции взять из потока #include <iostream.h> main () { int X, у; cout << Введите два целых числа: ; cin X у; cout Сумма чисел х и у равна (X + у) endl; return 0; Введите два целых числа: 30 92 Сумма чисел 30 и 92 равна 122 Рис. 11.9. Вычисление суммы двух целых чисел, вводимых с клавиатуры с помощью cin и операции взять из потока put была вызвана. Функция put может также вызываться с помощью выражения, имеющего значение кода ASCII символа; например, выражение cout.put(65) также выводит букву А. 11.4. Ввод потоков Рассмотрим теперь операцию ввода потока. Она может быть выполнена с помощью операции взять из потока, т.е. перегруженной операции . Эта операция обычно игнорирует во входном потоке так называемые символы разделители или пробельные символы (пробелы, знаки табуляции, знак новой строки). Позже мы увидим, каким образом это можно изменить. Операция взять из потока возвращает нулевое значение (false), когда встречает в потоке признак конца файла; в противном случае операция взять из потока возвращает ссылку на объект, с помощью которого она вызывалась. Каждый поток содержит набор битов состояния, используемых для управления состоянием потока (форматированием, установкой ошибок потока и т.д.). Операция взять из потока приводит к установке бита failbit при вводе данных неправильного типа и приводит к установке бита badbit при неуспешном завершении операции. В дальнейшем мы увидим, каким образом надо проверять эти биты после операции ввода-вывода. В разделах 11.7 и 11.8 использование битов состояния рассматривается более детально. 11.4.1. Операция взять из потока Для того, чтобы прочитать два целых числа, используем объект cin и перегруженную операцию взять из потока , как показано на рис. 11.9. Обратите внимание, что операции взять из потока можно сцеплять.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |